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. 递增顺序搜索树相关推荐

  1. leetcode 897. 递增顺序搜索树(中序遍历)

    给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点. 示例 1: 输入:root = [5,3,6,2 ...

  2. LeetCode 897 递增顺序搜索树

    https://leetcode-cn.com/problems/increasing-order-search-tree/ 解决方案 Morris中序遍历 class Solution {publi ...

  3. LeetCode Algorithm 897. 递增顺序搜索树

    897. 递增顺序搜索树 Ideas 看到搜索二叉树就想到了它的中序遍历序列是有序的,所以干脆直接用中序遍历序列,把每一项的left结点都置为nullptr,right结点置为下一项就OK了. 需要注 ...

  4. LeetCode —— 897. 递增顺序查找树(Python)

    给你一个树,请你 按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点. 示例 : 来源:力扣(LeetCode) 链接:https://leetcode- ...

  5. LeetCode 897. 递增顺序查找树(中序遍历)

    1. 题目 给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点. 示例 :输入:[5,3,6,2,4,null,8,1,null,null,n ...

  6. LeetCode 每日一题 2021-4-25 (递增顺序搜索树)

    897. 递增顺序搜索树 难度简单 给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点. 示例 1: ...

  7. LeetCode简单题之递增顺序搜索树

    题目 给你一棵二叉搜索树的 root ,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点. 示例 1: 输入:root ...

  8. 897. 递增顺序查找树-未解决

    897. 递增顺序查找树 https://leetcode-cn.com/contest/weekly-contest-100/problems/increasing-order-search-tre ...

  9. 97. 递增顺序搜索树

    97. 递增顺序搜索树: 题目链接 :97. 递增顺序搜索树 题目: 给你一棵二叉搜索树,请 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点, ...

最新文章

  1. unittest安装教程_unittest框架与自动化测试环境的搭建
  2. python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用
  3. 【Android 插件化】VirtualApp 源码分析 ( 安装应用源码分析 | HomePresenterImpl 添加应用 | AppRepository.addVirtualApp )
  4. c语言矩阵乘法优化,c语言矩阵相乘
  5. mysql 双缓冲_Mysql一些好的优化建议(二)
  6. kernel: CPU9: Temperature above threshold
  7. 威马披露2021全年交付智能纯电车44157辆
  8. 程序员“不会”修电脑的原因
  9. Win 7 各版本的含义
  10. 中国二十五首必听的网络原创歌曲
  11. html5刮刮卡,canvas 实现刮刮卡
  12. python学员管理系统
  13. linux操作系统没声音,Linux系统下没有声音的解决方案
  14. 人事管理系统之部门结构树的展示
  15. boost::lexical_cast 学习小记
  16. “华为”和“荣耀”哪个好?同等品质年轻人更喜欢Ta
  17. DB2数据库是什么?
  18. 大势所趋话开源——中国开源现状分析
  19. 爬取大众点评网的某城市美食店铺数据
  20. php 并发下载文件,PHP 并发下载 - 鸟屁不会的程序猿的个人空间 - OSCHINA - 中文开源技术交流社区...

热门文章

  1. MPW和Pilot的区别?
  2. 神奇的null 请输出结果并进行解释 console.log([typeof null, null instanceof Object])
  3. 为什么验证码短信成为行业短信主流?
  4. Unity 处理Scene视角容易穿模问题
  5. Oracle数据库Loop循环实例(记录)
  6. gb28181录制回放--invite信令流程
  7. 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字.
  8. js大小转换,字节转换成K、M、G、T 单位
  9. 再次霸榜“AI界奥运会”MLPerf™,浪潮的AI硬实力如何?
  10. linux 吃豆人游戏,分享|用这个吃豆人游戏在你的终端中玩街机