当前位置: 首页 > news >正文

从lc114. 二叉树展开为链表到lc-LCR 155二叉搜索树转化为排序的双向链表

1 lc114. 二叉树展开为链表

1.1 描述

进阶:你可以使用原地算法(O(1) 额外空间)展开这棵树吗?
在这里插入图片描述

1.2 解法一:

先序遍历这棵树并且将节点加入到一个list中,随后按顺序将list中的每一个元素的left指针置换为空,right指针指向下一个节点

1.3 解法二:

按照先序遍历的倒叙方式遍历这棵二叉树,然后同时操作这个节点的左右指针。

class Solution {TreeNode pre;public void flatten(TreeNode root) {if(root==null){return;}flatten(root.right);flatten(root.left);root.right=pre;root.left=null;pre=root;}
}

1.3.1 为什么不能采用先序遍历,然后在过程中将左右指针进行相应的链接和置空呢?

答:因为先根遍历时进行正向的链接,会导致右子树断开,后续就无法遍历右子树中的节点

1.3.2 为什么先序的倒叙是代码中这样写的呢

答:先序遍历是"根-左-右",那么先序的倒叙应该是"右-左-根"

1.3.3 为什么先序的倒叙可以避免右子树的撕裂?

答:其实右子树无论如何都会被断开一次,但是因为右子树中的节点都已经被正确处理完后才开始重新接上,后续就不需要遍历右子树了。

1.3.4 如果让展开后的单链表应该同样使用 TreeNode ,其中 left 子指针指向链表中下一个结点,而right 子指针始终为 null ,解法是不是基本相同?

答:对,遍历结构还是先序的倒叙遍历

class Solution {TreeNode pre;public void flatten(TreeNode root) {if(root==null){return;}flatten(root.right);flatten(root.left);root.left=pre;root.right=null;pre=root;}
}

2 LCR 155二叉搜索树转化为排序的双向链表

多种方法解决leetcode经典题目-LCR 155. 将二叉搜索树转化为排序的双向链表, 同时弄透引用变更带来的bug

http://www.lryc.cn/news/218287.html

相关文章:

  • 做读书笔记时的一个高效小技巧
  • Redis7.x 高级篇
  • 2023辽宁省数学建模B题数据驱动的水下导航适配区分类预测完整原创论文分享(python求解)
  • 向量数据库的崛起与多元化场景创新
  • 面试10000次依然会问的【ReentrantLock】,你还不会?
  • Bat批量处理
  • 【一、http】go的http基本请求方法
  • 【软考中级】软件设计师-下午题
  • (03)Mycat实现读写分离
  • [SSD综述1.7] SSD接口形态: SATA、M.2、U.2、PCIe、BGA
  • 20.5 OpenSSL 套接字RSA加密传输
  • C#中的19个LINQ to XML 类
  • 取消elementUI中table的选中状态和勾选状态赋值
  • LeetCode 72. 编辑距离(动态规划)
  • Bytedance揭秘OpenAI大模型: GPT-3到GPT-4进化路径
  • 第二十六章 BEV感知系列三(车道线感知)
  • 总结几个面试题
  • 【多线程】并发问题
  • httpclient工具类(支持泛型转换)
  • 【华为OD题库-003】最佳植树距离-Java
  • Oracle(12)Managing Indexes
  • DirectX3D 虚拟现实项目 三维物体的光照及着色(五个不同着色效果的旋转茶壶)
  • 【Verilog 教程】7.3 Verilog 串行 FIR 滤波器设计
  • 用golang实现一个基于interface的多态示例,展示其使用场景和优劣性。
  • ArcGIS for Android 禁止地图旋转
  • freertos静态创建任务
  • VBA根据Excel内容快速创建PPT
  • 服务器操作系统有哪些
  • 泄漏检测与修复(LDAR)过程管控平台(销售出租)VOCs便携式总烃分析仪(销售出租)
  • VueX 模块化和namespace