题目描述
https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/
解法:
/*
// 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 left = connect(root.left);
Node right = connect(root.right);
//链接的做法:
//同一父节点的兄弟结点
if(root.left!=null){
root.left.next = root.right;
// root.right.next = null;
}
//不同父节点的非兄弟结点相连,left和right都是root的孩子
while(left!=null&&left.right!=null){
left.right.next = right.left;
left = left.right;
right = right.left;//left和righ必然同时空,完美二叉树
}
return root;
}
}
在书:labuladong的算法小抄更为清晰的做法是: