Populating Next Right Pointers in Each Node II
2015-01-04 12:57
435 查看
Follow up for problem "Populating Next Right Pointers in Each Node".
What if the given tree could be any binary tree? Would your previous solution still work?
Note:
You may only use constant extra space.
For example,
Given the following binary tree,
After calling your function, the tree should look like:
What if the given tree could be any binary tree? Would your previous solution still work?
Note:
You may only use constant extra space.
For example,
Given the following binary tree,
1 / \ 2 3 / \ \ 4 5 7
After calling your function, the tree should look like:
1 -> NULL / \ 2 -> 3 -> NULL / \ \ 4-> 5 -> 7 -> NULL
与Populating Next Right Pointers in Each Node 基本一致 只是在向队列中加入子节点时要对左右节点分别判断 代码如下:
public class Solution { public void connect(TreeLinkNode root) { if(root==null) return ; int count=1; int level=0; Queue<TreeLinkNode> que =new LinkedList<TreeLinkNode>(); que.offer(root); while(que.isEmpty()!=true){ level=0; for(int i=0;i<count;i++){ root=que.peek(); que.poll(); if(i<count-1){ root.next=que.peek(); }else{ root.next=null; } if(root.left!=null){ que.offer(root.left); level++; } if(root.right!=null){ que.offer(root.right); level++; } } count=level; } } }
要求空间负载度为常数 所以上方法不满足要求 与I一样 对上一层节点的next处理完后再处理下一层节点 只是考虑下层节点时 要分别考虑其左右子节点的空否状态 PS:进行递归时 要先右再左 右边节点完成后才能使得左边的next节点得到完善 代码如下:
<pre name="code" class="java">public class Solution { public void connect(TreeLinkNode root) { if(root==null)return ; if(root.left!=null){ if(root.right!=null){ root.left.next=root.right; }else{ TreeLinkNode p=root.next; while(p!=null){ if(p.left!=null){ root.left.next=p.left; break; } if(p.right!=null){ root.left.next=p.right; break; } p=p.next; } } } if(root.right!=null){ TreeLinkNode p=root.next; while(p!=null){ if(p.left!=null){ root.right.next=p.left; break; } if(p.right!=null){ root.right.next=p.right; break; } p=p.next; } } connect(root.right); connect(root.left); } }
相关文章推荐
- LeetCode "Populating Next Right Pointers in Each Node II"
- Leetcode | Populating Next Right Pointers in Each Node I & II
- leetcode - Populating Next Right Pointers in Each Node II
- LeetCode OJ Populating Next Right Pointers in Each Node II
- [Leetcode] Populating Next Right Pointers in Each Node I,II
- LeetCode 117 Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node II
- [Leetcode][python]Populating Next Right Pointers in Each Node I and II
- LeetCode: Populating Next Right Pointers in Each Node II [117]
- 按层空间复杂度Populating Next Right Pointers in Each Node II
- leecode 解题总结:117. Populating Next Right Pointers in Each Node II
- 【leetcode】Populating Next Right Pointers in Each Node I & II(middle)
- [C++]LeetCode: 124 Populating Next Right Pointers in Each Node II(链接二叉树)
- Populating Next Right Pointers in Each Node II
- leetcode: Populating Next Right Pointers in Each Node II
- [LeetCode] Populating Next Right Pointers in Each Node II
- 117. Populating Next Right Pointers in Each Node II
- [LeetCode] Populating Next Right Pointers in Each Node II
- 【Leetcode长征系列】Populating Next Right Pointers in Each Node II
- 【LeetCode OJ】Populating Next Right Pointers in Each Node II