描述
给定一个二叉树
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。
分析
把树看成多个上下连接的链表,不用队列借助next指针层序遍历树。
假设当前要遍历的这一层的上一层已经是next指针赋值好了的。
把当前层和当前层的上个一层都看作是链表,给当前层创建一个链表头结点,借助next遍历上一层,遍历过程中结点存在孩子,则把这个孩子加入到当前层的链表中。
上一层遍历结束了,把指针指向当前层,把当前层看作下一层的上一层,再次遍历。
class Solution {
public Node connect(Node root) {
Node cur = root;
if(root == null){
return null;
}
Node dummy = new Node(0);
Node dummyCur = dummy;
while(cur != null){
while(cur != null){
if(cur.left != null){
dummyCur.next = cur.left;
dummyCur = dummyCur.next;
}
if(cur.right != null){
dummyCur.next = cur.right;
dummyCur = dummyCur.next;
}
cur = cur.next;
}
cur = dummy.next;
dummy.next = null;
dummyCur = dummy;
}
return root;
}
}