leetcode-填充同一层的兄弟节点Ⅱ
给定一个二叉树
struct TreeLinkNode {
TreeLinkNode *left;
TreeLinkNode *right;
TreeLinkNode *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。
说明:
- 你只能使用额外常数空间。
- 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。
示例:
给定二叉树,
1
/ \
2 3
/ \ \
4 5 7
调用你的函数后,该二叉树变为:
1 -> NULL
/ \
2 -> 3 -> NULL
/ \ \
4-> 5 -> 7 -> NULL
第一道题是:leetcode-每个节点的右向指针(填充同一层的兄弟节点)
我们依然可以使用层序遍历的方法,为每个结点添加next指针。
但是时间复杂度不满足要求。
public class Solution {
public void connect(TreeLinkNode root) {
if(root==null)return ;
Queue<TreeLinkNode> q=new LinkedList();
q.add(root);
while(!q.isEmpty()){
int size=q.size();
for(int i=;i<size;i++){
TreeLinkNode temp=q.peek();q.poll();
if(i<size-)temp.next=q.peek();
if(temp.left!=null)q.add(temp.left);
if(temp.right!=null)q.add(temp.right);
}
}
}
将第一题的递归方法进行改造:
比如该二叉树
1
/ \
2 3
/ \ \
4 5 7
\ / \
9 14 15
/ \
18 19
遍历的顺序为:14->15 2->3 5->7 4->5 9->14 18->19
每次先处理结点的右子树,递归到叶子结点(没有左子树和右子树)。然后返回上一层,递归处理左子树。
类似于前序遍历的镜像: trave(root.right) ;
trave(root.left);
对每一层结点的处理可以通过tem=tem.next来进行跳转。
得到如下方法:
public class Solution {
public void connect(TreeLinkNode root) {
if(root==null)return;
TreeLinkNode tem=root;
//处理root左子树的指针
if(root.left!=null){
if(root.right!=null){
root.left.next=root.right;
}
//处理root.left.next的指向
while(tem.next!=null&&root.left.next==null){
tem=tem.next;//tem可以在同一层结点进行跳转
if(tem.left!=null)root.left.next=tem.left;
else if(tem.right!=null)root.left.next=tem.right;
}
}
//处理root右子树的指针
if(root.right!=null){
//处理root.right.next的指向
while(tem.next!=null&&root.right.next==null){
tem=tem.next;//tem可以在同一层结点进行跳转
if(tem.left!=null)root.right.next=tem.left;
else if(tem.right!=null)root.right.next=tem.right;
}
}
connect(root.right);
connect(root.left);
}
}
结果: 执行用时: 1 ms, 在Populating Next Right Pointers in Each Node II的Java提交中击败了98.04% 的用户
leetcode-填充同一层的兄弟节点Ⅱ的更多相关文章
- [leetcode] 117. 填充同一层的兄弟节点 II
117. 填充同一层的兄弟节点 II 与116. 填充同一层的兄弟节点完全一样,二叉树的层次遍历..这是这次不是完美二叉树了 class Solution { public void connect( ...
- [leetcode] 116. 填充同一层的兄弟节点
116. 填充同一层的兄弟节点 其实就是个二叉树的层次遍历 class Solution { public void connect(TreeLinkNode root) { if (root == ...
- LeetCode 116/117. 填充同一层的兄弟节点(Populating Next Right Pointers in Each Node)
题目描述 给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } 填充 ...
- 【LeetCode】116#填充同一层的兄弟节点
题目描述 给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } 填充 ...
- LeetCode(116):填充同一层的兄弟节点
Medium! 题目描述: 给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *n ...
- LeetCode(117):填充同一层的兄弟节点 II
Medium! 题目描述: 给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *n ...
- [Java]LeetCode116. 填充同一层的兄弟节点 | Populating Next Right Pointers in Each Node
Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...
- [Java]LeetCode117. 填充同一层的兄弟节点 II | Populating Next Right Pointers in Each Node II
Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...
- leetcode-每个节点的右向指针(填充同一层的兄弟节点)
给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } 填充它的每个 ...
- Leetcode116. Populating Next Right Pointers in Each Node填充同一层的兄弟节点
给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } 填充它的每个 ...
随机推荐
- JS日期比较大小 给定时间和持续时间计算最终时间
/* 往指定时间字符串上加时间间隔,获得新的时间字符串 * startDateStr:开始时间字符串,类似"2015-7-20 17:26:00" * durationN ...
- 2.1 The Python Interpreter(python解释器)
2.1 The Python Interpreter(Python解释器) Python是一门解释性语言.Python的解释器一次只能运行一个命令.标准的Python解释器环境可以用通过输入pytho ...
- mycat结合双主复制实现读写分离模式
简介:应用程序仅需要连接mycat,后端服务器的读写分离由mycat进行控制,后端服务器数据的同步由MySQL主从同步进行控制. 本次实验环境架构图 服务器主机规划 主机名 IP 功能 备注 lin ...
- vue 项目项目启动时由于EsLint代码校验报错
今天在编写好vue项目代码时,在命令行输入npm start的时候出现了如下图所示的一大堆错误: 在网上查找资料说是缺少EsLint配置文件的问题,最终找到一篇由 hahazexia 编写的一篇博客文 ...
- PAT乙级1016
1016 部分A+B (15 分) 正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA 组成的新整数 PA.例如:给定 A=3862767,DA=6,则 ...
- JS判断指定dom元素是否在屏幕内的方法实例
前言 刷网页的时候,有时会遇到这样一个情景,当某个dom元素滚到可见区域时,或者图片的懒加载效果,它就会展现显示动画,十分有趣.那么这是如何实现的呢? 实现原理 想要实现这个功能,就要知道具体的实现原 ...
- ZOJ 3992 One-Dimensional Maze(思维题)
L - One-Dimensional Maze Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%lld & % ...
- gulp安装搭建前端项目自动化
下面是今天在配置gulp运行项目时遇到的问题几个问题及其完整的安装过程: 1.安装node.js .gulp是基于nodejs使用的 查看版本node -v 2.npm install gulp ...
- 2017-2018-1 20155231 《信息安全系统设计基础》实现mypwd
2017-2018-1 20155231 <信息安全系统设计基础>实现mypwd Linux pwd命令用于显示工作目录. 执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称. p ...
- centos 中sshd莫名其妙不见了?
发现问题 遇到问题:首先莫要慌:事出有因:先检查一波: 首先呢,看一下/var/log/yum.log 是否有误删的记录: 如有被误删的操作的话:可以去看看日志:到底咋回事: 然后么 yum ins ...