一、问题描述
Given a binary tree
struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; }
Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL
.
Initially, all next pointers are set to NULL
.
Note:
- You may only use constant extra space.
- You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
For example,
Given the following perfect binary tree,
1 / \ 2 3 / \ / \ 4 5 6 7
After calling your function, the tree should look like:
1 -> NULL / \ 2 -> 3 -> NULL / \ / \ 4->5->6->7 -> NULL
二、问题分析
还是二叉树的遍历问题,也是从根节点开始,所以可以采用先序遍历的方式。仔细分析,什么情况下next不为空呢?①图中2,3这种同属于一个父节点的情况②5,6这种情况,到底“这种”代表什么情况呢,观察树发现,“5,6”的父节点“2和3”之间是由next进行连接的。具体的看代码。
三、Java AC代码
public void connect(TreeLinkNode root) {
if (root==null) {
return ;
}
if (root.left!=null && root.right!=null) {
root.left.next=root.right;
}
if(root.next!=null && root.right!=null){
root.right.next = root.next.left;
}
connect(root.left);
connect(root.right);
}