题目要求空间复杂度为常数级别,因此不能用递归或者使用队列辅助。
如果当前层中节点的next指针已经填充完毕,那么我们很容易根据当前层去填充下一层,只需要“记住”下一层的最左侧节点,即可通过循环实现题目的目标。在这里引入哑节点记录下一层最左侧节点。
另外的话,由于题中二叉树不是满二叉树或者完全二叉树,需要用一个辅助指针记录上一个节点。
代码如下:
class Solution {
public:
void connect(TreeLinkNode *root) {
TreeLinkNode *left = root;
while (left) {
TreeLinkNode dummy(0), *prev;
prev = &dummy;
for (auto p = left; p; p = p->next) {
if (p->left) {
prev->next = p->left;
prev = p->left;
}
if (p->right) {
prev->next = p->right;
prev= p->right;
}
}
left = dummy.next;
}
}
};
京公网安备 11010502036488号