populating-next-right-pointers-in-each-node-ii
来源:互联网 发布:java服务器开发与c 编辑:程序博客网 时间:2024/06/09 20:27
1、populating-next-right-pointers-in-each-node-ii 来源:牛客网
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 7After calling your function, the tree should look like: 1 -> NULL / \ 2 -> 3 -> NULL / \ \ 4-> 5 -> 7 -> NULL
2、思路:
- 代码1思路,采用队列,对于每一层的元素,遍历时,用一个临时的结点cur放置当前poll出来的结点,poll后,检查当前队列的对头是否是该层元素,若是用cur指向就可以了;
- 代码2思路,不使用队列(题目说是You may only use constant extra space)。首先不使用队列的情况下我们要遍历整个树,就得利用它每一层都有一条链,有链就可以通过一个结点遍历一层了。这里通过新建头部结点tmpLevelFirst(该结点本身的值和树没关系,只有tmpLevelFirst.next来指向每一层的头结点)来实现
3、代码1,用队列辅助实现:
public class BFSConnectTree { public void connect(TreeLinkNode root) { if(root == null) return; Queue<TreeLinkNode> queue = new LinkedList<TreeLinkNode>(); queue.add(root); TreeLinkNode node = new TreeLinkNode(0); while(!queue.isEmpty()){ int broad_size = queue.size();//每一层 的节点数目 for(int i = 0; i < broad_size; i++){ node = queue.poll(); if(i == broad_size - 1){//若是当前层的最后一个元素手动指向null node.next = null; }else{ node.next = queue.peek(); } if(node.left != null) queue.add(node.left); if(node.right != null) queue.add(node.right); } } }}
代码2,利用每层都是链的特点实现:
public class BFSConnectTreeWithoutSpace { public void connect(TreeLinkNode root) { while (root != null) { //tmpLevelFirst为新建立的每层第一个节点(为了方便后面遍历当前行节点) TreeLinkNode tmpLevelFirst = new TreeLinkNode(0); TreeLinkNode cur = tmpLevelFirst; while (root != null) { if (root.left != null) { cur.next = root.left; cur = cur.next; } if (root.right != null) { cur.next = root.right; cur = cur.next; } root = root.next; } root = tmpLevelFirst.next; } }}
注:代码和思路都参考了上面链接中的答案,非常感谢那些大佬
阅读全文
0 0
- Populating Next Right Pointers in Each Node、Populating Next Right Pointers in Each Node II
- 【LeetCode】Populating Next Right Pointers in Each Node 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] Populating Next Right Pointers in Each Node II
- leetcode 79: 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】Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node II
- 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
- Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node (I & II)
- Populating Next Right Pointers in Each Node II
- JAVA基础(一)------认识JAVA
- FFmpeg源码分析。
- 神奇的计算机画图学
- 关于(void**)&的理解
- Permission denied: user=administrator, access=WRITE, inode="/":root:supergroup:drwxr-xr-x
- populating-next-right-pointers-in-each-node-ii
- VIM基本命令
- 第9届北信校赛
- [生产力工具]Mysql入门
- 计算圆的面积
- Swift UIScrollView 属性及代理方法
- [LeetCode] 4. Median of Two Sorted Arrays
- 写给人类的机器学习 一、为什么机器学习重要
- graph