文章目录
二叉树
什么是二叉树
二叉树(Binary Tree)是一种树形数据结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树是各种树结构的基础,广泛应用于数据存储、排序、搜索等领域。
二叉树的基本术语
- 节点(Node):二叉树的基本单元,每个节点包含一个数据元素和两个指向其子节点的指针(或引用)。
- 根节点(Root Node):二叉树最顶部的节点,整个树从根节点开始。
- 父节点(Parent Node):对于某个节点来说,直接指向它的节点称为它的父节点。
- 子节点(Child Node):对于某个节点来说,它直接指向的节点称为它的子节点,最多有两个子节点(左子节点和右子节点)。
- 叶节点(Leaf Node):没有子节点的节点,也称为终端节点。
- 深度(Depth):从根节点到某个节点的路径长度。
- 高度(Height):从某个节点到其叶节点的最长路径长度,叶节点的高度为 0。
二叉树的类型
满二叉树(Full Binary Tree)
- 定义:满二叉树是一种特殊的二叉树,树中每个节点要么没有子节点,要么有两个子节点。
- 特点:每一层上的节点数都达到了最大值。满二叉树是
完全二叉树
的一种特例
1
/ \
2 3
/ \ / \
4 5 6 7
完全二叉树(Complete Binary Tree)
- 定义:完全二叉树是一种二叉树,所有层都完全填满,除了最后一层。最后一层的节点必须从左到右排列紧密,中间不能有空缺。
1
/ \
2 3
/ \ /
4 5 6
平衡二叉树(Balanced Binary Tree)
- 定义:平衡二叉树是一种特殊的二叉树,它的左右子树的高度差不超过 1。
- 特点:为了保证查找的效率接近
O(log n)
,平衡二叉树始终保持相对平衡,避免极端情况出现。
1
/ \
2 3
/ \
4 5
二叉搜索树(Binary Search Tree, BST)
- 定义:二叉搜索树是一种特殊的二叉树,具有以下性质:
- 对于每个节点,其左子树中的所有节点值小于该节点的值。
- 对于每个节点,其右子树中的所有节点值大于该节点的值。
- 特点:
- 中序遍历二叉搜索树会得到一个有序的序列(从小到大)。
- 查找、插入和删除操作的时间复杂度平均为
O(log n)
,最坏情况下为O(n)
(当树退化成链表时)。
平衡二叉搜索树
- 定义:平衡二叉搜索树(如 AVL 树、红黑树)是二叉搜索树的一个扩展,它通过自我调整使得树保持平衡,从而保证操作的时间复杂度为
O(log n)
。 - 特点:
- AVL 树:左右子树高度差不超过 1。
- 红黑树:通过颜色标记节点并根据特定规则旋转,使树保持平衡。
3
/ \
2 5
/ /
1 4
二叉树的遍历方式
前序遍历(Pre-order Traversal)
- 顺序:根节点 -> 左子树 -> 右子树
- 算法步骤:
- 访问根节点。
- 递归前序遍历左子树。
- 递归前序遍历右子树。
中序遍历(In-order Traversal)
- 顺序:左子树 -> 根节点 -> 右子树
- 算法步骤:
- 递归中序遍历左子树。
- 访问根节点。
- 递归中序遍历右子树。
后序遍历(Post-order Traversal)
- 顺序:左子树 -> 右子树 -> 根节点
- 算法步骤:
- 递归后序遍历左子树。
- 递归后序遍历右子树。
- 访问根节点。
层序遍历(Level-order Traversal)
- 顺序:按层从左到右依次遍历
- 算法步骤:
- 使用队列,从根节点开始。
- 依次访问队列中的节点,并将其子节点按从左到右的顺序加入队列。
❤觉得有用的可以留个关注~❤