主题思想: 这个还是层级遍历的变形。 层级遍历,需要一个队列数据结构作为辅助,然后记录每个层有多少个节点,来区分属于哪一个层。 只需要对每一层做相同的操作: 把相同层的节点连起来就可以了。
所以代码和层级遍历,相差无几,
AC 代码:
/**
* 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> q=new LinkedList<TreeLinkNode>();
TreeLinkNode node=null;
q.offer(root);
int levelSize=0;
TreeLinkNode prev=null;
while(!q.isEmpty()){
levelSize=q.size();
prev=null;
for(int i=0;i<levelSize;i++){
node=q.poll();
if(prev==null) prev=node;
else{
prev.next=node;
prev=prev.next;
}
if(node.left!=null) q.offer(node.left);
if(node.right!=null) q.offer(node.right);
}
}
return ;
}
}