题目描述
继续思考"Populating Next Right Pointers in Each Node".这道题
给定一个二叉树
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 void connect(TreeLinkNode root) {
if(root==null){
return;
}
Queue<TreeLinkNode> Q = new LinkedList<TreeLinkNode>();
Q.add(root);
while(!Q.isEmpty()){
int len = Q.size();
for(int i=0;i<len;i++){
TreeLinkNode temp = Q.poll();
if(temp.left!=null){
Q.add(temp.left);
}
if(temp.right!=null){
Q.add(temp.right);
}
if(i!=len-1){
temp.next = Q.peek();
}
}//for
}//while
}