二叉树递归
文章平均质量分 65
flashlight_hi
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode 分类刷题:199. 二叉树的右视图
本文介绍了一种使用深度优先搜索(DFS)算法获取二叉树右视图的递归解法。关键思路是先递归右子树再递归左子树,当当前深度等于结果数组长度时,说明首次遇到该层最右节点,将其加入结果。时间复杂度为O(n),空间复杂度最坏为O(n)。算法巧妙利用递归顺序保证每层只记录最右侧节点,简洁高效地解决了问题。原创 2025-12-18 15:28:11 · 189 阅读 · 0 评论 -
LeetCode 分类刷题:110. 平衡二叉树
本文探讨如何判断二叉树是否为平衡二叉树。平衡二叉树的定义是左右子树高度差不超过1。本题递归解法:递归计算子树高度时,若发现不平衡(高度差大于1)则返回-1,否则返回实际高度。关键点在于正确声明局部变量(leftH/rightH),避免递归过程中变量污染。时间复杂度O(n),空间复杂度O(n)。代码实现中需注意变量声明问题(JavaScript中必须使用let/const),否则递归时会错误覆盖变量值。原创 2025-12-17 11:45:05 · 388 阅读 · 0 评论 -
LeetCode 分类刷题:101. 对称二叉树
本文介绍如何判断二叉树是否对称。通过递归比较左右子树是否互为镜像:左右子树当前节点值相等,且左子树的左孩子与右子树的右孩子、左子树的右孩子与右子树的左孩子都对称。时间复杂度O(n),空间复杂度O(n)。原创 2025-12-16 16:21:57 · 317 阅读 · 0 评论 -
LeetCode 分类刷题:100. 相同的树
本文探讨了如何判断两棵二叉树是否相同。通过递归方法,先比较根节点值,再递归比较左右子树。当遇到空节点时,若两树同时为空则返回true,否则返回false。算法时间复杂度为O(n),需要遍历所有节点;空间复杂度为O(n),由递归调用栈深度决定。该方法简洁高效地解决了二叉树相同性判断问题。原创 2025-12-15 14:45:34 · 251 阅读 · 0 评论 -
LeetCode 分类刷题:987. 二叉树的垂序遍历
该文介绍了二叉树垂序遍历的算法实现。采用深度优先搜索遍历二叉树,记录每个节点的行号、列号和值。使用哈希表按列号存储节点信息,最后按列号排序后,每列内先按行号再按值排序输出。时间复杂度O(nlogn)主要来自排序过程,空间复杂度O(n)用于存储节点信息。算法通过递归DFS遍历节点,利用哈希表分组存储,最终按要求顺序输出结果。原创 2025-12-10 17:09:40 · 376 阅读 · 0 评论 -
LeetCode 分类刷题:1448. 统计二叉树中好节点的数目
本文讨论了统计二叉树中好节点数量的两种递归解法。好节点定义为从根到该节点路径上所有节点值都不大于其自身值的节点。第一种解法通过外部变量记录结果,只有递过程;第二种解法(灵神和官方解法)采用完整递归,在递时维护路径最大值,在归时累加子树结果。时间复杂度均为O(n),空间复杂度最坏情况下为O(n)。第二种解法通过递归返回值传递信息,体现了先递后归的完整递归思想。原创 2025-11-24 12:32:19 · 610 阅读 · 0 评论 -
LeetCode 分类刷题:129. 求根节点到叶节点数字之和
本文介绍了一种计算二叉树所有根到叶路径数字之和的方法。采用深度优先搜索(DFS)遍历二叉树,每访问一个节点就将当前路径值乘以10加上节点值。当到达叶子节点时返回当前路径值,否则继续递归遍历左右子树。递归最终将所有叶子节点的路径值相加得到总和。算法时间复杂度为O(n),空间复杂度为O(n)(最坏情况下)。该方法通过递归实现了简洁高效的路径数字求和。原创 2025-11-23 17:56:29 · 270 阅读 · 0 评论 -
LeetCode 分类刷题:112. 路径总和
该算法使用深度优先搜索(DFS)判断二叉树是否存在根到叶子的路径和等于目标值。关键点:1)空节点返回false;2)到达叶子节点时若剩余和为0则返回true;3)递归检查左右子树。时间复杂度O(n),空间复杂度O(n)(最坏情况下)。注意空树必须返回false,因为路径必须从根到叶子节点。原创 2025-11-23 17:38:32 · 396 阅读 · 0 评论 -
LeetCode 分类刷题:404. 左叶子之和
本文讨论了计算二叉树所有左叶子节点之和的问题。解题思路分两种:1)递归遍历时通过标识位判断是否为左叶子;2)父节点视角判断左子节点是否为叶子。关键点在于左叶子的判断必须由父节点完成,因为叶子节点自身无法确定其左右位置。两种解法时间复杂度均为O(n),空间复杂度最坏情况下为O(n)。灵神的解法通过在递归后额外检查当前节点的左子节点是否为叶子,确保不漏计任何左叶子节点。原创 2025-11-20 10:53:03 · 669 阅读 · 0 评论 -
LeetCode 分类刷题:111. 二叉树的最小深度
本文讨论了如何计算二叉树的最小深度。与最大深度不同,最小深度需要考虑子节点为空的情况。当左右子节点都为空时返回1;当其中一边为空时返回另一边的最小深度;当两边都不为空时取较小深度加1。文章纠正了将最大深度解法简单修改的错误,并给出了正确的递归解法,时间复杂度为O(n)。关键点在于正确处理空子树情况,确保路径到达的是叶子节点。原创 2025-11-18 20:53:15 · 393 阅读 · 0 评论 -
LeetCode 分类刷题:104. 二叉树的最大深度
本文介绍了计算二叉树最大深度的两种递归方法。1. 自底向上解法:当节点为空时返回0,否则递归计算左右子树深度并取较大值加1,向上返回。2. 自顶向下解法:维护并更新全局最大深度,通过递归遍历时更新当前深度,向下传递。两者时间复杂度均为O(n),空间复杂度最坏为O(n),需注意JavaScript中必须显式声明局部变量(let/const/var),否则在严格模式下会报错。原创 2025-11-17 21:07:51 · 341 阅读 · 0 评论
分享