题解: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;}
}