C++C语言之——树

树是一种非线性数据结构,由节点(Node)和连接节点的边(Edge)组成,具有层次关系。它模拟了现实世界中的层级结构,例如文件系统、家族谱系、HTML DOM 等。

一、树的定义

树是 n(n ≥ 0)个节点的有限集合。当 n = 0 时称为空树;当 n > 0 时满足:

  • 有且仅有一个特定的节点称为根节点(Root);

  • 其余节点可分为 m(m ≥ 0)个互不相交的有限集合,每个集合本身又是一棵树,称为原树的子树(Subtree)。

这个定义是递归的------树由子树构成,子树又是更小的树。

二、基本术语

术语 含义
节点​ 树中的基本数据单元,包含数据和指向子节点的引用
根节点​ 树的最顶层节点,没有父节点
父节点 / 子节点​ 若节点 A 有一条边连接到 B,则 A 是 B 的父节点,B 是 A 的子节点
兄弟节点​ 拥有同一个父节点的节点
叶子节点​ 度为 0 的节点(没有子节点)
内部节点​ 度大于 0 的节点(非叶子节点)
度​ 一个节点拥有的子节点个数
树的度​ 树中所有节点度的最大值
深度 / 高度​ 从根节点到某个节点的路径长度称为该节点的深度;从某个节点到最远叶子节点的路径长度称为该节点的高度。树的深度等于根节点的高度
层​ 根节点在第 1 层,其子节点在第 2 层,以此类推
森林​ m(m ≥ 0)棵互不相交的树的集合

三、常见树的类型

类型 特点
二叉树​ 每个节点最多有两个子节点(左孩子、右孩子)
二叉搜索树​ 左子树所有节点值小于根,右子树所有节点值大于根
完全二叉树​ 除最后一层外全满,最后一层节点靠左排列
满二叉树​ 每一层节点数都达到最大值
**平衡二叉树(AVL)**​ 任意节点左右子树高度差不超过 1
红黑树​ 近似平衡的二叉搜索树,保证最长路径不超过最短路径的两倍
B 树 / B+ 树​ 多路平衡查找树,常用于数据库索引
堆​ 完全二叉树,分为最大堆和最小堆
**Trie(字典树)**​ 用于字符串检索的多叉树

四、树的存储方式

  1. 顺序存储(数组):适用于完全二叉树,利用下标关系定位父子节点。

  2. 链式存储 :每个节点包含数据域和若干指针域(指向子节点),最常用的是二叉链表(left、right指针)。

五、树的遍历

遍历方式 顺序(以二叉树为例)
前序​ 根 → 左子树 → 右子树
中序​ 左子树 → 根 → 右子树
后序​ 左子树 → 右子树 → 根
层序​ 从上到下、从左到右逐层访问
相关推荐
fensnote3 小时前
西门子 S7 PLC 内部寄存器读写 Demo(C 语言)
c语言·开发语言
把我格子衫拿来4 小时前
VTK 与 Qt 的 CMake 工程怎么组织?模块、工具链与二进制兼容排错
c++·qt·vtk·cmake·工程实践
总裁余(余登武)4 小时前
K-means算法改进(Python版)
python·算法·kmeans
灯澜忆梦4 小时前
【面向对象编程c++】| 指针与自定义数据类型
开发语言·c++·算法
xxwl5854 小时前
区域赛算法模版第八章---贪心(Greedy)
c++·笔记·学习·算法
雾沉川4 小时前
Visual C++运行库合集 v105.0 安装教程
开发语言·c++·dll
_wyt0015 小时前
洛谷P17461 [GESP202609 八级] 生成树计数 题解
c++·数学·树·gesp·八级·仙人掌
CCblandy5 小时前
向量检索 ANN 参数实测:换一种数据分布,recall 掉了 51 个百分点
人工智能·python·算法·自然语言处理·性能优化
CS创新实验室5 小时前
一棵树怎么做到“自平衡还不太费力“?——红黑树的旋转与染色
数据结构·算法·红黑树·408·计算机考研
Logic1015 小时前
C语言/数据结构位运算题解:异或XOR找出被挑选一次的果子编号——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度