114. 二叉树展开为链表 Krains 2020-08-02 08:59:00 树
时间:2022-07-22
本文章向大家介绍114. 二叉树展开为链表 Krains 2020-08-02 08:59:00 树,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
# 题目链接
# 前序遍历
解题思路
- 二叉树是按照先序遍历展开的,递归时只要记住它先序遍历的之前的一个结点pre,再把当前节点插入到pre的右子树即可
- 注意要存储root的左右结点信息,因为先序遍历修改了root的左右结点
class Solution {
TreeNode pre = null;
public void flatten(TreeNode root) {
if(root == null)
return ;
TreeNode l = root.left;
TreeNode r = root.right;
// 左子树清空
root.left = null;
// 如果当前root不是根结点,pre就不为null
if(pre != null){
pre.right = root;
}
// 记录先序遍历的前一个结点
pre = root;
flatten(l);
flatten(r);
}
}
# 后序遍历
解题思路
- 后续遍历返回的时候我们已经知道root的左右结点信息,这时候我们可以对其展开
- 对于当前root的左孩子,直接修改为root的右孩子,而对于原来root的右孩子,由于其左子树的结点不止一个,左孩子可能是左子树链表的表头,因此需要将其放在链表的末尾(用测试用例举例说明,当root为1的时,其左孩子是2,2是链表2-3-4的表头,需要将右孩子5放在4的后面)
class Solution {
public void flatten(TreeNode root) {
helper(root);
}
public TreeNode helper(TreeNode root){
if(root == null)
return null;
TreeNode l = helper(root.left);
TreeNode r = helper(root.right);
root.right = l;
root.left = null;
// 将右孩子放在root链表的末尾
TreeNode t = root;
while(t.right != null){
t = t.right;
}
t.right = r;
return root;
}
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter基础widgets教程-FlutterLogo篇
- 配置压缩版mysql 5.7以上版本
- nutz 自定义sql的使用
- nutz 中 子模块 参数的使用。
- java向mysql插入数据乱码问题解决
- java向数据库中插入中文出现乱码
- Flutter基础widgets教程-FractionallySizedBox篇
- 关于myeclipse控制台输出中文乱码的问题
- nutz 自定义查询 分页 取值
- jquery-uploadifyv3.2.1 文件上传插件 学习
- Flutter基础widgets教程-Icon篇
- Redis:持久化
- Flutter基础widgets教程-IconButton篇
- Flutter基础widgets教程-Image篇
- Go - 学习 grpc.Dial(target string, opts …DialOption) 的写法