题解:LeetCode题解
解题思想:
通过创建辅助指针来解决该问题
当当前节点cur不为空的时候,创建辅助节点dummy,使其一直作为每一层的第一个节点的前一个节点。
创建辅助指针pre,pre初始指向dummy,之后通过pre来填充当前层的next节点
如果cur.left不为空时,pre的next节点为cur.left,之后pre指针前进,同理,当cur.right不为空的时候,pre的next指针为cur.right,之后pre前进,最后当前节点cur前进。
如果cur前进后为空,则表示需要开始遍历下一层,cur指向dummy的next节点,如果cur仍为空,则循环结束,返回根节点,如果cur不为空,则表示cur已经指向了下一层的第一个节点处,开始该层的遍历。
代码:
/*
// Definition for a Node.
class Node {
public int val;
public Node left;
public Node right;
public Node next;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, Node _left, Node _right, Node _next) {
val = _val;
left = _left;
right = _right;
next = _next;
}
};
*/
class Solution {
public Node connect(Node root) {
if(root == null)
{
return null;
}
Node cur=root;
while(cur!=null)
{
//创建辅助节点
Node dummy=new Node(0);
Node pre=dummy;
while(cur!=null)
{
if(cur.left!=null)
{
pre.next=cur.left;
pre=pre.next;
}
if(cur.right!=null)
{
pre.next=cur.right;
pre=pre.next;
}
cur=cur.next;
}
cur=dummy.next;
}
return root;
}
}