[leetcode] Populating Next Right Pointers in Each Node
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
https://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node/
思路:关键是5跟6如何连接,用递归的做法,把当前root的左节点和它所有后继右节点 与 右节点和所有深度的左节点连接。
public class Solution { public void connect(TreeLinkNode root) { if(root==null) return; if(root.left!=null){ TreeLinkNode l = root.left; TreeLinkNode r = root.right; while(l!=null){ l.next=r; l=l.right; r=r.left; } } connect(root.left); connect(root.right); } }
第二遍记录:
第三遍记录: 利用层序遍历的方法,用null分割每一层。每当一个元素弹出queue的时候,该元素的next指针指向队列头部queue.peek()。
public class Solution { public void connect(TreeLinkNode root) { if(root==null) return; Queue<TreeLinkNode> queue = new LinkedList<TreeLinkNode>(); queue.add(root); queue.add(null); while(!queue.isEmpty()){ TreeLinkNode out = queue.remove(); if(out==null){ if(!queue.isEmpty()){ queue.add(null); } }else{ out.next = queue.peek(); if(out.left!=null) queue.add(out.left); if(out.right!=null) queue.add(out.right); } } } }
第三遍: 层序遍历
public class Solution { public void connect(TreeLinkNode root) { if(root == null) return; Queue<TreeLinkNode> queue = new LinkedList<>(); queue.add(root); while(!queue.isEmpty()){ int levelNum = queue.size(); TreeLinkNode pre = null; for(int i=0;i<levelNum;i++){ TreeLinkNode out = queue.remove(); if(pre!=null){ pre.next = out; } if(out.left!=null){ queue.add(out.left); } if(out.right!=null){ queue.add(out.right); } pre = out; } } } }
参考:
http://blog.csdn.net/havenoidea/article/details/12840497
http://blog.csdn.net/fightforyourdream/article/details/14514165