题目链接:
https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/
思路:
整体思路还是和上一题一样,只不过这次的不是完全二叉树,所以需要保存当前层的头结点。
而且在同一层中还要保存当前节点的上一个节点,便于横向连接。
Example:
AC 0ms 100% java:
/*
// Definition for a Node.
class Node {
public int val;
public Node left;
public Node right;
public Node next;
public Node() {}
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) {
Node cur=root;
Node prev=null;
Node head=null;
while(cur!=null){//外层循环用head更新每一层的第一个节点
while(cur!=null){//内层循环依次向右找next节点
if(cur.left!=null){
if(prev==null)
head=cur.left;//若prev首次访问,则无next域需要更新
else
prev.next=cur.left;//更新next域
prev=cur.left;
}
if(cur.right!=null){
if(prev==null)
head=cur.right;
else
prev.next=cur.right;//更新next域
prev=cur.right;
}
cur=cur.next;//内层循环依次向右找next节点
}
cur=head;
prev=null;
head=null;
}
return root;
}
}