[leetcode]117. Populating Next Right Pointers in Each NodeII用next填充同层相邻节点
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.
 - Recursive approach is fine, implicit stack space does not count as extra space for this problem.
 
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
题意:
给定一个任意二叉树,其中每个节点都有next指针。
设法将next指针指向同一层右侧相邻节点。
思路:
递归,解法很巧妙。
以 1 为curr,用pre来连接curr.left:2 和 curr.right:3。因为此时根节点 1的next指向null, 退出for循环
1 ( curr )--->null
/ \
dummy(-1):pre--> 2---> 3
/ \ \
4 5 7 递归调用connect(dummy.next),因为dummy.next指向2,此时 2 为curr。用pre来连接curr.left:4 和 curr.right:5。
1
/ \
2(curr)---> 3
/ \ \
dummy(-1):pre--> 4--->5 7
继续走for循环, curr = curr.next, 此时curr为3。 继续用pre连接 curr.left(3的左子树为Null) 和 curr.right:7。
1
/ \
2 ---> 3(curr)
/ \ \
dummy(-1):pre--> 4--->5 --->7
因为此时curr的next指向null, 退出for循环。
继续递归调用connect(dummy.next)... 直至 root == null, return
代码:
 public class Solution {
     public void connect(TreeLinkNode root) {
         if (root == null) return;
         TreeLinkNode dummy = new TreeLinkNode(-1);
         for (TreeLinkNode curr = root, prev = dummy;
                 curr != null; curr = curr.next) {
             if (curr.left != null){
                 prev.next = curr.left;
                 prev = prev.next;
             }
             if (curr.right != null){
                 prev.next = curr.right;
                 prev = prev.next;
             }
         }
         connect(dummy.next);
     }
 }
[leetcode]117. Populating Next Right Pointers in Each NodeII用next填充同层相邻节点的更多相关文章
- [LeetCode] 117. Populating Next Right Pointers in Each Node II 每个节点的右向指针 II
		
Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ...
 - Java for LeetCode 117 Populating Next Right Pointers in Each Node II
		
Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ...
 - leetcode 117  Populating Next Right Pointers in Each Node II ----- java
		
Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ...
 - Leetcode#117 Populating Next Right Pointers in Each Node II
		
原题地址 二叉树的层次遍历. 对于每一层,依次把各节点连起来即可. 代码: void connect(TreeLinkNode *root) { if (!root) return; queue< ...
 - 117. Populating Next Right Pointers in Each Node II 计算右边的附属节点
		
[抄题]: Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNod ...
 - leetcode 199. Binary Tree Right Side View 、leetcode 116. Populating Next Right Pointers in Each Node 、117. Populating Next Right Pointers in Each Node II
		
leetcode 199. Binary Tree Right Side View 这个题实际上就是把每一行最右侧的树打印出来,所以实际上还是一个层次遍历. 依旧利用之前层次遍历的代码,每次大的循环存 ...
 - 【LeetCode】117. Populating Next Right Pointers in Each Node II 解题报告(Python)
		
[LeetCode]117. Populating Next Right Pointers in Each Node II 解题报告(Python) 标签: LeetCode 题目地址:https:/ ...
 - Leetcode 笔记 117 - Populating Next Right Pointers in Each Node II
		
题目链接:Populating Next Right Pointers in Each Node II | LeetCode OJ Follow up for problem "Popula ...
 - leetcode@ [116/117] Populating Next Right Pointers in Each Node I & II (Tree, BFS)
		
https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/ Follow up for problem ...
 
随机推荐
- [UE4]编程师外挂Visual Assist X
			
Visual Assist X是一款非常好的Microsoft Visual Studio插件,可以支持Microsoft Visual Studio 2003,Microsoft Visual St ...
 - Hadoop2.0的基本构成总览
			
Hadoop1.x和Hadoop2.0构成图对比 Hadoop1.x构成: HDFS.MapReduce(资源管理和任务调度):运行时环境为JobTracker和TaskTracker: Hadoop ...
 - 小朋友学Python(2)
			
本节学习python的第一个程序:输出“Hello World!”.咱们用两种方法实现 方法(一) 进入python环境,直接使用print方法 hello world.png 方法(二) 先编程 ...
 - nginx经过多层代理后获取真实来源ip
			
nginx取 $remote_addr 当做真实ip,而事实上,$http_X_Forwarded_For 才是用户真实ip,$remote_addr只是代理上一层的地址 解决方案: 在 http 模 ...
 - ORM sqlachemy学习
			
内容: 1.ORM介绍 2.SQLAlchemy介绍 3.SQLAlchemy内部处理 4.SQLAlchemy使用 参考: http://www.cnblogs.com/wupeiqi/articl ...
 - shell $*与$@的区别
			
[root@bgx shell]# cat tt.sh #! /bin/bash test() { echo "未加引号,二者相同" echo $* echo $@ echo &q ...
 - C基本语句和运算符
			
1,逗号运算符
 - 26. 天马tomcat授权文件的影响因素
			
问题:Tianma版本同一台机器的Server端序列号有时会显示空白 描述:同一台机器的tomcat,tianma版本序列号为空(如图) 解决:手动删除ABS_DOCUMENT\LiveBos目录下s ...
 - 2. select下拉框获取选中的值
			
1.获取select选中的value值: $("#select1ID").find("option:selected").val(); --select1ID ...
 - 75. ID重新走过,备份表
			
select * into ML_QuoteApply_InPro_bak20150629 from ML_QuoteApply_InPro truncate table ML_QuoteApply_ ...