给定一个二叉树
struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; }
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL
。
初始状态下,所有 next 指针都被设置为 NULL
。
示例:
给定二叉树,
1 / \ 2 3 / \ \ 4 5 7
调用你的函数后,该二叉树变为:
1 -> NULL / \ 2 -> 3 -> NULL / \ \ 4-> 5 -> 7 -> NULL
思路:
由于给的二叉树可能不是完美二叉树,所以在遍历每一层时,比起完美二叉树稍微麻烦一点。
代码如下:
public class Connect {
private static class TreeLinkNode{
int val;
TreeLinkNode next,left,right;
TreeLinkNode(int val){
this.val=val;
}
}
private static void solve(TreeLinkNode root) {
TreeLinkNode pt=root;
while(pt!=null) {
TreeLinkNode nextLevel=new TreeLinkNode(0),nextPt=nextLevel;
while(pt!=null) {
if(pt.left!=null) {
nextPt.next=pt.left;
nextPt=pt.left;
}
if(pt.right!=null) {
nextPt.next=pt.right;
nextPt=pt.right;
}
pt=pt.next;
}
pt=nextLevel.next;
}
}
}