算法刷题之八树
1|0树
树是一种很有规律的数据结构,如果使用合适的访问方法,可以很便捷高效的解决问题。比如递归
题目:
- 树的最大深度
- 验证二叉搜索树
- 对称二叉树
- 路径总和
- 二叉树的序列化与反序列化
- 树的公共父节点
2|0树的最大深度
二叉树的最大深度
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
从底向上
从顶向下
该调用方式是所谓的尾递归
调用,所以比普通的调用方式更加高效和节省内存
3|0验证二叉搜索树
验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
方法:这道题的规律也很明显,左边的值小于父节点,右边的值大于父节点。其子节点也是类似。有两种方式:1.中序遍历可以得到一个升序的数组,只要判断数组是否为完全升序即可;2.判断当前节点值在不在某个正常范围中
首先,我们来看二叉搜索树的两个特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
仔细思考这两句话,你可以理解为:
当前节点的值是其左子树的值的上界(最大值)
当前节点的值是其右子树的值的下界(最小值)
OK,有了这个想法,你可以将验证二叉搜索树的过程抽象成下图(-00代表无穷小,+00代表无穷大)
4|0对称二叉树
对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
方法:原理就是分别比较对应位置上的值,如果相同则继续,如果不相同则退出
迭代方式
:每次将对应的两组数据加入的队列中,然后取出比较,如果相等,再将其子树加入到队列中。
知识点
:层次遍历
递归方式
:递归比较,从root节点的左右开始,左边和右边是否相等。左边的子节点和右边的子节点是否相等。迭代比较下
5|0路径总和
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
解法一:一边遍历一边做减法
解法二: 遍历出所有路径,最后做加法
path 保留每一层的遍历结果,同时,多层的遍历中函数保存的path值是不一样的。每一层函数的遍历path列表的值都是保存当前的状态,互不影响。
原因在于:
简约版
分别在left和right中都使用了path,这个path在递归的层次中互相不干扰,如果想单纯的遍历出一棵树的路径,可以使用如下的代码:
6|0二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
方法:树的遍历很简单,分为DFS和BFS。其中这一道题比较适合BFS即广度优先遍历。
7|0二叉树的序列化与反序列化
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
8|0二叉树的最近公共祖先
方法:使用前序遍历的方式,一直遍历找到一个节点,然后返回该节点,如果没有则直到叶子节点返回None。
当两个底层的节点不断被上浮,一定会相遇。像相遇点就是公共祖先节点。
9|0树的小结
树这种数据结构在算法中我还没有遇到,估计是面试官也不好驾驭这种数据结构。对于树来说,很多算法题我都非常懵,不看答案想破脑袋都想不出的,最好仰天长啸:原来还可以这样。
对于树来来说需要明白的技巧前序遍历
,中序遍历
,后序遍历
,BFS
,DFS
等。多看套路,少走弯路。
__EOF__

本文链接:https://www.cnblogs.com/goldsunshine/p/14930785.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理