题目描述
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.
解题思路
将二叉树的同层节点构成链表,每一层中,最左节点为头结点依次指向其右边的节点。利用队列先进先出的特点来实现,但是需要注意的是每一层的最后一个节点需要特殊处理。
代码
/**
* Definition for binary tree with next pointer.
* public class TreeLinkNode {
* int val;
* TreeLinkNode left, right, next;
* TreeLinkNode(int x) { val = x; }
* }
*/
public class Solution {
public void connect(TreeLinkNode root) {
if(root == null)
return;
Queue<TreeLinkNode> queue = new LinkedList<TreeLinkNode>();
queue.add(root);
while(queue.size() != 0){
int size = queue.size();
for(int i=0;i<size;i++){
TreeLinkNode tmp = queue.poll();
if(tmp.left!=null)
queue.add(tmp.left);
if(tmp.right!=null)
queue.add(tmp.right);
if(i!=size-1)//如果为最右节点,无需指向下一个节点,因为下一个节点有可能为下一层的最左节点
tmp.next = queue.peek();
}
//queue.poll();
}
}
}