117. Populating Next Right Pointers in Each Node II
2016-06-10 22:13
399 查看
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:
空间O(1)版本 http://www.2cto.com/kf/201311/259258.html
另外一种层次遍历的方法,最坏情况空间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;
}
}
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;
}
}
相关文章推荐
- 116. Populating Next Right Pointers in Each Node
- Node.js: exports与module.exports的区别
- nodejs模块加载的猜想
- nodejs的模块引用
- Node.js 实用工具
- nodejs特性
- openwrt 编译node.js功能(解决Illegal instruction错误)
- Node.js CSV导入功能,上传并读取
- hadoop集群中datanode启动几秒钟自动关闭
- Delete Node in a Linked List
- [TypeScript] Using Typings and Loading From node_modules
- [LeetCode]problem 117. Populating Next Right Pointers in Each Node II
- nodejs Controller层 封装
- [Nutch]Hadoop动态删除DataNode节点和TaskTracker节点
- [Nutch]Hadoop动态增加DataNode节点和TaskTracker节点
- leetcode 19. Remove Nth Node From End of List
- Node.js、Sublime text3便携设置/自定义npm、packages文件夹位置
- 19. Remove Nth Node From End of List
- Node.js中npm常用命令大全
- TraceGL监控Node.js应用或者浏览器JavaScript代码