Chapter 1 Binary Tree
理论基础
二叉树是一种非线性数据结构,由节点组成,每个节点最多有两个子节点,通常称为"左子节点"和"右子节点"。
基本概念
- 节点(Node):二叉树的基本单位,包含数据和指向子节点的引用
- 根节点(Root):二叉树的顶部节点,没有父节点
- 叶节点(Leaf):没有子节点的节点
- 父节点(Parent):有子节点的节点
- 子节点(Child):某节点下一层的节点
- 兄弟节点(Sibling):共享同一父节点的节点
- 节点的度(Degree):节点的子节点数量
- 树的高度/深度:从根节点到最远叶节点的最长路径上的节点数
- 节点的层级(Level):从根节点到该节点的边的数量加1
二叉树的类型
- 满二叉树(Full Binary Tree):每个节点要么有0个子节点,要么有2个子节点
- 完全二叉树(Complete Binary Tree):除了最后一层外,其他层都被完全填充,且最后一层的所有节点都尽可能靠左排列
- 完美二叉树(Perfect Binary Tree):所有内部节点都有两个子节点,所有叶节点都在同一层
- 平衡二叉树(Balanced Binary Tree):任意节点的左右子树高度差不超过1
- 二叉搜索树(Binary Search Tree):左子树上所有节点的值都小于根节点的值,右子树上所有节点的值都大于根节点的值
二叉树的性质
- 第i层的最大节点数为 $2^(i-1)$
- 深度为k的二叉树最多有 $2^k - 1$ 个节点
- 任何非空二叉树,若叶节点数为n0,度为2的节点数为n2,则 n0 = n2 + 1
- 具有n个节点的完全二叉树的高度为 ⌊log₂n⌋ + 1
二叉树的存储结构
- 链式存储:每个节点包含数据域和指向左右子节点的指针
- 顺序存储:使用数组存储,对于索引为i的节点,其左子节点索引为2i+1,右子节点索引为2i+2
二叉树的遍历方式
- 深度优先遍历(DFS)
- 前序遍历(Preorder):根 → 左 → 右
- 中序遍历(Inorder):左 → 根 → 右
- 后序遍历(Postorder):左 → 右 → 根
- 广度优先遍历(BFS)
- 层序遍历(Level Order):按层从左到右遍历所有节点
二叉树的定义
Go
type TreeNode struct {
Val any
Left *TreeNode
Right *TreeNode
}