数据结构之—树
一、树的定义及一些基本术语
树:树是一类重要的非线性数据结构,是以分支关系定义的层次结构
树的一些基本术语:
- 结点(node)——树中的元素,包括数据项及若干指向其子树的分支
- 结点的度(degree)——结点拥有的子树数
- 树的度——一棵树中最大的结点度数
- 叶子(leaf)——度为0的结点
- 孩子(child)——结点子树的根称为该结点的孩子
- 双亲(parents)——孩子结点的上层结点
- 兄弟(sibling)——同一双亲的孩子
- 结点的层次(level)——从根结点算起,根为第一层,它的孩子为第二层……
- 树的深度(depth)/高度——树中结点的最大层次数
- 森林(forest)——m(m0)棵互不相交的树的集合
- 子孙——一个结点所有子树中的结点。
- 祖先——从根结点到达某结点路径上的所有结点。
- 有序树/无序树——如果一棵树中结点的各子树从左到右是有次序的,即交换了某结点各子树的相对位置, 则构成不同的树,那么称该树为有序树。反之,为无序树。
- 基本形态

二、二叉树(重点)
- 定义:二叉树是n>=0个结点的有限集,它或为空树(n=0),或由一个根结点和两棵分别称为左、右子树的互不相交的二叉树构成
- 特点:度为2的有序树
- 基本形态
-
性质:
- 二叉树第i层最多2i-1个结点(i>=1)
- 深度为k的二叉树至多有2k-1个结点(k>=1)
- 对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。 或:二叉树的叶子结点数等于双分支结点数加1。
- 满二叉树:一颗深度为K且结点数为2k-1的树,即除了最后一层都没有空孩子且只有最后一层有且全为叶结点
-
完全二叉树:
- 定义:深度为k, 有n个结点的二叉树当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应。
- 特点:深度为k的完全二叉树第1~k-1层必定为满二叉树,第k层的叶结点必定集中在左边
- 性质:具有n个结点的完全二叉树的深度为 2(n+1)|或2n|+1
- 完全二叉树和满二叉树最主要的区别在于最后一层是否完整,(注:满二叉树是特殊的完全二叉树)


三、二叉树的遍历
遍历:如何按某条搜索路径访问二叉树中的每个顶点,使每个节点被访问一次且仅被访问一次
常见方法:
- 先序遍历:先访问根结点,然后分别先序遍历左子树、右子树
- 中序遍历:先中序遍历左子树,然后访问根结点,最后中序遍历右子树
- 后序遍历:先后序遍历左、右子树,然后访问根结点
- 按层次遍历:从上到下、从左到右访问各结点
用一张图来解释

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现