leetcode 116- Populating Next Right Pointers in Each Node
题目:
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.
- You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
For example,
Given the following perfect binary tree,
1
/ \
2 3
/ \ / \
4 5 6 7
After calling your function, the tree should look like:
1 -> NULL
/ \
2 -> 3 -> NULL
/ \ / \
4->5->6->7 -> NULL 题目给出的二叉树是完美二叉树,要求是将每层的结点依次连接起来,并且每层的最后一个结点的next赋为null。 思路:
首先将每一层的最后一个结点的next赋值为null。
然后依次操作每一层,首先获取每一层的第一个结点。(其实二叉树和链表有点像,完美二叉树的最外两侧就可以看做两张链表,left和right指针类似链表的next指针)
引入两个指针,分别是cur和pre。 cur指向当前操作层,pre指向上一层。
1.cur是pre的左孩子,直接将cur的next指向pre的right结点,cur变成cur->next;
2.cur是pre的右孩子,并且pre的next不为null,cur->next指向pre->next->left;
3.cur是pre的右孩子,并且pre的next为null,说明cur已经指向了该层的最后一个结点,直接将cur->next赋为null即可。
执行到此处,要更新pre和cur,让它们分别指向自己下一层的第一个结点。(引入计数变量count,每次执行到此处count加1,根据count更新pre和cur)
循环结束条件:cur为null。 代码:
public void connect(TreeLinkNode root){
if(root == null){
return;
}
TreeLinkNode cur = root, pre = root;
//把每层最右侧的结点的next赋为null
while(cur != null){
cur.next = null;
cur = cur.right;
}
int count = 0;
cur = root.left;
while(true){
if(cur == pre.left){
cur.next = pre.right;
cur = cur.next;
}else{
if(cur == pre.right && pre.next != null){
cur.next = pre.next.left;
cur = cur.next;
pre = pre.next;
}else{
cur.next = null;
count ++;
pre = root;
for(int i = 0; i < count; i++){
pre = pre.left;
}
cur = pre.left;
}
}
}
}
leetcode 116- Populating Next Right Pointers in Each Node的更多相关文章
- 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] 116. Populating Next Right Pointers in Each Node 每个节点的右向指针
You are given a perfect binary tree where all leaves are on the same level, and every parent has two ...
- leetcode 116 Populating Next Right Pointers in Each Node ----- java
Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...
- [LeetCode] 116. Populating Next Right Pointers in Each Node 解决思路
Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...
- Java for LeetCode 116 Populating Next Right Pointers in Each Node
Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...
- leetCode 116.Populating Next Right Pointers in Each Node (为节点填充右指针) 解题思路和方法
Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...
- [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 ...
- Leetcode 笔记 116 - Populating Next Right Pointers in Each Node
题目链接:Populating Next Right Pointers in Each Node | LeetCode OJ Given a binary tree struct TreeLinkNo ...
- 【LeetCode】 Populating Next Right Pointers in Each Node 全然二叉树
题目:Populating Next Right Pointers in Each Node <span style="font-size:18px;">/* * Le ...
- [Leetcode Week15]Populating Next Right Pointers in Each Node II
Populating Next Right Pointers in Each Node II 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/popul ...
随机推荐
- 【IOS笔记】Resource Management in View Controllers
Resource Management in View Controllers 视图控制器的资源管理 View controllers are an essential part of managin ...
- MBR中“起始磁头/扇区/柱面“同"逻辑区块地址(LBA)"的区别
"起始磁头/扇区/柱面"共有3个字节,最大能表示8G的扇区编号.当硬盘扇区编号多于8G时,此表示法便力不从心,便使用4个字节的LBA表示法(逻辑扇区地址,相对扇区地址). 算是计算 ...
- dom paser
dom paser /** * */ package ec.utils; import java.io.BufferedInputStream; import java.io.ByteArrayInp ...
- IOS 开发文件操作——NSFileManager
转自:http://blog.csdn.net/xyz_lmn/article/details/8968213,留着方便查阅 iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像androi ...
- Android.mk学习 笔记
感谢: 原创作品 转载请注明出处:http://www.cnblogs.com/langlang/ 作者email: dayhappyhappy@163.com LOCAL_PATH := $(cal ...
- 转:ASP.NET MVC扩展之HtmlHelper辅助方法
1.什么是HtmlHelper辅助方法?其实就是HtmlHelper类的扩展方法,如下所示: namespace System.Web.Mvc.Html { public static class F ...
- Android笔记:Socket通讯常见问题
经验证的socket通讯问题 1.如果是模拟器和本机PC直接通讯,需要使用本机IP地址 而不是 10.0.2.2 如本机的静态地址为192.168.1.2 则直接使用该地址 2.接收和连接代码不能在 ...
- Android模拟器disconnected问题
具体原因不明,偶尔会出现 window -> Show Views -> device -> view menu -> Reset adb 一般可以解决该问题
- SMART Goals
Once you have planned your project, turn your attention to developing several goals that will enable ...
- 使用Aspose.Cell控件实现Excel高难度报表的生成(二)
继续在上篇<使用Aspose.Cell控件实现Excel高难度报表的生成(一)>随笔基础上,研究探讨基于模板的Aspose.cell报表实现,其中提到了下面两种报表的界面,如下所示: 或者 ...