LeetCode 897. 递增顺序搜索树
897. 递增顺序搜索树
【递归】比较捞,目前只想到了把所有节点保存一遍再更改左右指针的指向。
class Solution {List<TreeNode> list = new ArrayList();public void dfs(TreeNode node){if(node == null) return;dfs(node.left);list.add(node);dfs(node.right);}public TreeNode increasingBST(TreeNode root) {dfs(root);int n = list.size();for(var i = 1; i < n; i++){TreeNode pre = list.get(i - 1);pre.left = null;pre.right = list.get(i);}list.get(n - 1).left = null;return list.get(0);}
}
【迭代】依然是保存所有节点,只不过通过栈实现中序遍历的迭代写法
class Solution {public TreeNode increasingBST(TreeNode root) {List<TreeNode> list = new ArrayList();Deque<TreeNode> stack = new LinkedList();Set<TreeNode> set = new HashSet();stack.push(root);while(!stack.isEmpty()){TreeNode top = stack.poll();if(set.contains(top)) list.add(top);else{set.add(top);if(top.right != null) stack.push(top.right);stack.push(top);if(top.left != null) stack.push(top.left);}}int n = list.size();for(var i = 1; i < n; i++){TreeNode pre = list.get(i - 1);pre.left = null;pre.right = list.get(i);}list.get(n - 1).left = null;return list.get(0);}
}
【优化】其实不用保存所有节点,只需要保存前一个节点,然后在遍历的过程中修改前一个节点的指针指向即可。
class Solution {TreeNode dummy = new TreeNode();TreeNode pre = dummy;void dfs(TreeNode node){if(node == null) return;dfs(node.left);pre.left = null;pre.right = node;pre = node;dfs(node.right);}public TreeNode increasingBST(TreeNode root) {dfs(root);pre.left = null;return dummy.right;}
}
LeetCode 897. 递增顺序搜索树相关推荐
- leetcode 897. 递增顺序搜索树(中序遍历)
给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点. 示例 1: 输入:root = [5,3,6,2 ...
- LeetCode 897 递增顺序搜索树
https://leetcode-cn.com/problems/increasing-order-search-tree/ 解决方案 Morris中序遍历 class Solution {publi ...
- LeetCode Algorithm 897. 递增顺序搜索树
897. 递增顺序搜索树 Ideas 看到搜索二叉树就想到了它的中序遍历序列是有序的,所以干脆直接用中序遍历序列,把每一项的left结点都置为nullptr,right结点置为下一项就OK了. 需要注 ...
- LeetCode —— 897. 递增顺序查找树(Python)
给你一个树,请你 按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点. 示例 : 来源:力扣(LeetCode) 链接:https://leetcode- ...
- LeetCode 897. 递增顺序查找树(中序遍历)
1. 题目 给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点. 示例 :输入:[5,3,6,2,4,null,8,1,null,null,n ...
- LeetCode 每日一题 2021-4-25 (递增顺序搜索树)
897. 递增顺序搜索树 难度简单 给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点. 示例 1: ...
- LeetCode简单题之递增顺序搜索树
题目 给你一棵二叉搜索树的 root ,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点. 示例 1: 输入:root ...
- 897. 递增顺序查找树-未解决
897. 递增顺序查找树 https://leetcode-cn.com/contest/weekly-contest-100/problems/increasing-order-search-tre ...
- 97. 递增顺序搜索树
97. 递增顺序搜索树: 题目链接 :97. 递增顺序搜索树 题目: 给你一棵二叉搜索树,请 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点, ...
最新文章
- unittest安装教程_unittest框架与自动化测试环境的搭建
- python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用
- 【Android 插件化】VirtualApp 源码分析 ( 安装应用源码分析 | HomePresenterImpl 添加应用 | AppRepository.addVirtualApp )
- c语言矩阵乘法优化,c语言矩阵相乘
- mysql 双缓冲_Mysql一些好的优化建议(二)
- kernel: CPU9: Temperature above threshold
- 威马披露2021全年交付智能纯电车44157辆
- 程序员“不会”修电脑的原因
- Win 7 各版本的含义
- 中国二十五首必听的网络原创歌曲
- html5刮刮卡,canvas 实现刮刮卡
- python学员管理系统
- linux操作系统没声音,Linux系统下没有声音的解决方案
- 人事管理系统之部门结构树的展示
- boost::lexical_cast 学习小记
- “华为”和“荣耀”哪个好?同等品质年轻人更喜欢Ta
- DB2数据库是什么?
- 大势所趋话开源——中国开源现状分析
- 爬取大众点评网的某城市美食店铺数据
- php 并发下载文件,PHP 并发下载 - 鸟屁不会的程序猿的个人空间 - OSCHINA - 中文开源技术交流社区...
热门文章
- MPW和Pilot的区别?
- 神奇的null 请输出结果并进行解释 console.log([typeof null, null instanceof Object])
- 为什么验证码短信成为行业短信主流?
- Unity 处理Scene视角容易穿模问题
- Oracle数据库Loop循环实例(记录)
- gb28181录制回放--invite信令流程
- 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字.
- js大小转换,字节转换成K、M、G、T 单位
- 再次霸榜“AI界奥运会”MLPerf™,浪潮的AI硬实力如何?
- linux 吃豆人游戏,分享|用这个吃豆人游戏在你的终端中玩街机