包含力扣226-二叉树上左右子节点交换,114--二叉树展开为链表,116--填充每个节点的下一个右侧节点指针,654--最大二叉树,105--前序和中序遍历结果构造二叉树
1、
链表遍历分两种结构,迭代和递归。
同样根据链表可以 推导出二叉树和N叉树的遍历框架。
再由n叉树的遍历扩展到图的遍历。
手把手带你刷二叉树(第一期)
快速排序可以看作 二叉树的前序遍历,归并可以看作后序遍历
写递归算法的秘诀
写树相关的算法,简单说就是,先搞清楚当前 root
节点「该做什么」以及「什么时候做」,然后根据函数定义递归调用子节点,递归调用会让孩子节点做相同的事情。
所谓「该做什么」就是让你想清楚写什么代码能够实现题目想要的效果,所谓「什么时候做」,就是让你思考这段代码到底应该写在前序、中序还是后序遍历的代码位置上。
226 题-二叉树上的每一个节点的左右子节点进行交换
二叉树上的每一个节点的左右子节点进行交换。
递归实现: --深度优先
转换左右孩子的时候,左右孩子的孩子已经到位了。/或者先转换左右孩子,再转换子孙
可以放在前序遍历和后续遍历的位置。
错误1:没有return 错误2,左右孩子搞反了 错误3:没有判断为空
迭代实现: --广度优先
LinkedList创建: LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
( )别忘了
poll 删除返回第一个元素,add加入一个元素。
解析: 当换完左右子树后,再对孙子节点交换,也就是队列中推入孩子节点
注意: 循环退出的条件,然后循环里面要干什么:用临时变量交换左右孩子。 tmp是某一个根节点
错误:要用while不能用 if
116. 填充每个节点的下一个右侧节点指针
tips: 转换为节点要做的事情,这里设置为两个节点。
方法1:递归函数法
从根节点开始,定义函数conect_two 。 如果connect的两个节点不为空,就连接。
left.left - left.right /left.right --right.left /right.left-right.right
错误: 忘记了 first.next=second; 即本层忘了连接了。
函数可以不加public。
方法2递归
两个指针,从根节点开始往中间靠拢,直到最后一层。
方法3 迭代
一种是有共同父节点,可以直接填充下一个。一种是跨了父节点,可以通过上一层的串联来获得next即为root.right.next => root.next.left
114. 二叉树展开为链表
假设左右子树已经拉直了
同样用递归的方法,假设左右子树已经拉直了。
错误: 把左子树放到右孩子后, 原来的右子树要 放在 最下节点(要一直遍历到下面) 的右边
左子树要置空
迭代的方法
将左子树放到右子树的位置,右子树放到左子树的最右下。
关键: 找到右子树的前驱节点 然后再考虑 下一个节点root = root.right;
类后序遍历
其实要做的是前序遍历的结果倒过来,1-2-3-4-5-6 到6-5-4-3-2-1
遍历顺序 右 左 中。
--- 还有一种解,先略过。
手把手带你刷二叉树(第二期)
654. 最大二叉树
数组参数: .length 可以获得长度 最小值:Integer.MIN_VALUE
问题:
判断节点条件,可以把子右孩子看作节点单独判断,若left>right则返回空,这样比较好处理
其次,索引i<=r,因为传入的就是length-1
105通过前序和中序遍历结果构造二叉树
递归版本
问题:
找index时,可以加个break加快速度。 其次是算size时不用+1。 最后变量注意要初始化
迭代版本
补充
给一个随机数组,生成相应的二叉搜索树
https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/
根据前序和中序,输出后序
__EOF__

本文链接:https://www.cnblogs.com/Blunt-Raz0r/p/15500303.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~