117. Populating Next Right Pointers in Each Node II
来源:互联网 发布:java商城开发视频教程 编辑:程序博客网 时间:2024/05/17 01:56
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,
1 / \ 2 3 / \ \ 4 5 7
After calling your function, the tree should look like:
1 -> NULL / \ 2 -> 3 -> NULL / \ \ 4-> 5 -> 7 -> NULL
空间O(1)版本
http://www.2cto.com/kf/201311/259258.html
public static void connect(TreeLinkNode root) { // 空节点就直接返回 if (root == null){ return; } // 找到与root同一行的next node TreeLinkNode rootNext = root.next; TreeLinkNode next = null; // 下一个被连接的对象 // rootNext如果是null说明已经处理完这一层的所有node // next不等于null说明找到了找到最左边的下一个被连接的对象 while (rootNext != null && next == null) { if (rootNext.left != null){ // 优先找左边 next = rootNext.left; } else{ next = rootNext.right; } rootNext = rootNext.next; } if (root.left != null) { if (root.right != null){ // 内部相连 root.left.next = root.right; }else{ // 跨树相连 root.left.next = next; } } if (root.right != null){ // 跨树相连 root.right.next = next; } connect(root.right); // 要先让右边都先连起来 connect(root.left); }
另外一种层次遍历的方法,最坏情况空间O(N/2)
public void connect(TreeLinkNode root){if(root==null)return ;ArrayDeque<TreeLinkNode> deque=new ArrayDeque<>();deque.add(root);int level=1;TreeLinkNode pre=null;boolean levelchang=true;while(!deque.isEmpty()){TreeLinkNode t=deque.poll();if(t.left!=null)deque.add(t.left);if(t.right!=null)deque.add(t.right);if(!levelchang)pre.next=t;level--;if(level==0){levelchang=true;level=deque.size();}else {levelchang=false;}pre=t;}}
0 0
- LeetCode 117. Populating Next Right Pointers in Each Node II
- [LeetCode]117.Populating Next Right Pointers in Each Node II
- [Leetcode] 117. Populating Next Right Pointers in Each Node II
- 117. Populating Next Right Pointers in Each Node II
- [leetcode] 117.Populating Next Right Pointers in Each Node II
- 116. Populating Next Right Pointers in Each Node && 117. II
- [LeetCode]117. Populating Next Right Pointers in Each Node II
- Leetcode 117. Populating Next Right Pointers in Each Node II
- [leetcode]117. Populating Next Right Pointers in Each Node II
- 117. Populating Next Right Pointers in Each Node II
- LeetCode 117. Populating Next Right Pointers in Each Node II
- 117. Populating Next Right Pointers in Each Node II
- 117. Populating Next Right Pointers in Each Node II
- Leetcode 117. Populating Next Right Pointers in Each Node II
- 117. Populating Next Right Pointers in Each Node II
- [LeetCode] 117. Populating Next Right Pointers in Each Node II
- 117. Populating Next Right Pointers in Each Node II
- 117. Populating Next Right Pointers in Each Node II
- git将本地仓库上传到远程仓库
- 模拟登陆百度之分析网站流程
- I00022 孙子定理
- git使用详细介绍
- 数据结构
- 117. Populating Next Right Pointers in Each Node II
- 写给自己的一封信(http://www.cnblogs.com/yejiurui/)
- 【转载】大型互联网网站架构演变
- hdu5464 Clarke and problem (dp)
- ACM心得
- ROS SLAM代码框架概述
- 120. Triangle
- android调用高版本api函数的兼容性问题
- 彻底弄清楚session是什么?