关于树的思维导图
《关于树的思维导图》
1. 树的定义与基本概念
1.1. 定义
- 正式定义: 一个由节点和边组成的非线性数据结构,满足以下条件:
- 有一个特定的节点被指定为根节点。
- 除根节点外,其余节点被分成互不相交的集合,每个集合又是一棵树,称为根节点的子树。
- 递归定义: 树是若干棵子树的集合,这些子树也都是树。
1.2. 基本术语
- 节点 (Node): 树的基本单元,包含数据和指向其他节点的指针(或引用)。
- 根节点 (Root): 树中最顶端的节点,没有父节点。
- 子节点 (Child): 一个节点直接连接的下一级节点。
- 父节点 (Parent): 一个节点的上一级节点,连接到该节点。
- 兄弟节点 (Sibling): 具有相同父节点的节点。
- 叶节点 (Leaf): 没有子节点的节点,也称为终端节点。
- 内部节点 (Internal Node): 至少有一个子节点的节点。
- 祖先节点 (Ancestor): 从根节点到该节点路径上的所有节点。
- 子孙节点 (Descendant): 该节点所有子树中的节点。
- 深度 (Depth): 从根节点到该节点的唯一路径上的边数。根节点的深度为0。
- 高度 (Height): 从该节点到叶节点的最长路径上的边数。叶节点的高度为0。 树的高度是根节点的高度。
- 度 (Degree): 一个节点的子节点的数量。
- 树的度: 树中所有节点度的最大值。
- 森林 (Forest): 若干棵互不相交的树的集合。
1.3. 树的性质
- 连通性: 任意两个节点之间都存在唯一的路径。
- 无环性: 树中不存在环路。
- 边与节点的关系: 具有n个节点的树,一定有n-1条边。
2. 树的类型
2.1. 无序树 (Unordered Tree)
2.2. 有序树 (Ordered Tree)
- 节点之间的顺序重要的树。
- 二叉树 (Binary Tree): 每个节点最多有两个子节点,分别称为左子节点和右子节点。
- 满二叉树 (Full Binary Tree): 所有内部节点都有两个子节点,且所有叶节点都在同一层。
- 完全二叉树 (Complete Binary Tree): 除了最后一层,其他层都是满的,并且最后一层的所有节点都集中在左侧。
- 完美二叉树 (Perfect Binary Tree): 所有层都是满的。
- 多叉树 (N-ary Tree): 每个节点最多有 N 个子节点。
2.3. 特殊类型的树
- 二叉搜索树 (Binary Search Tree, BST):
- 对于树中的任意节点,其左子树中的所有节点的值都小于该节点的值,其右子树中的所有节点的值都大于该节点的值。
- 平衡二叉搜索树 (Balanced Binary Search Tree):
- 一种特殊的二叉搜索树,其左右子树的高度差不超过 1,从而保证搜索效率。
- AVL 树: 一种自平衡的二叉搜索树。
- 红黑树 (Red-Black Tree): 另一种自平衡的二叉搜索树,使用颜色标记节点来维护平衡。
- 堆 (Heap):
- 一种特殊的树形数据结构,满足堆的性质。
- 最小堆 (Min Heap): 父节点的值小于或等于其子节点的值。
- 最大堆 (Max Heap): 父节点的值大于或等于其子节点的值。
- B 树 (B-Tree):
- 一种自平衡的多路搜索树,通常用于数据库和文件系统。
- Trie 树 (字典树, 前缀树):
3. 树的表示方法
3.1. 数组表示法
- 使用数组来存储树的节点,并通过数组下标来表示节点之间的关系。
- 优点: 简单直观,适用于完全二叉树。
- 缺点: 对于非完全二叉树,会浪费存储空间;插入和删除节点比较困难。
3.2. 链式表示法
- 使用链表来存储树的节点,每个节点包含数据和指向其子节点的指针。
- 二叉树链式表示: 每个节点包含数据、指向左子节点的指针和指向右子节点的指针。
- 多叉树链式表示: 每个节点包含数据和一个指向子节点列表的指针。
- 优点: 节省存储空间,插入和删除节点比较容易。
- 缺点: 访问节点需要遍历链表。
3.3. 广义表表示法
- 使用括号嵌套表示树的结构。例如:
A(B(D,E),C(F,G))
表示以 A 为根节点,B 和 C 为子节点,B 有子节点 D 和 E,C 有子节点 F 和 G 的树。
4. 树的遍历
4.1. 二叉树的遍历
- 前序遍历 (Preorder Traversal): 根节点 -> 左子树 -> 右子树
- 中序遍历 (Inorder Traversal): 左子树 -> 根节点 -> 右子树
- 后序遍历 (Postorder Traversal): 左子树 -> 右子树 -> 根节点
- 层序遍历 (Level Order Traversal): 从根节点开始,逐层遍历树的节点。
4.2. 多叉树的遍历
- 类似二叉树的前序和后序遍历,但需要遍历所有子节点。
- 通常使用深度优先搜索 (DFS) 或广度优先搜索 (BFS) 实现。
5. 树的应用
5.1. 数据存储与检索
- 文件系统: 使用树形结构组织文件和目录。
- 数据库索引: 使用 B 树等数据结构加速数据检索。
5.2. 搜索算法
- 二叉搜索树: 用于快速搜索和排序数据。
- 决策树: 用于机器学习中的分类和回归问题。
5.3. 编译原理
5.4. 网络路由
5.5. 组织结构
5.6. 压缩算法