二叉树(Binary Tree)

📌 定义

二叉树是每个节点最多有两个子节点的树结构,通常称为左子节点和右子节点。

       1
      / \
     2   3
    / \   \
   4   5   6

🎯 核心特点

  1. 每个节点最多2个子节点:左子节点和右子节点
  2. 递归结构:每个子树也是二叉树
  3. 层次结构:从根节点开始,逐层向下
  4. 有序性:左右子节点有区别

📚 二叉树分类

1. 满二叉树(Full Binary Tree)

每个节点要么是叶子节点,要么有两个子节点。

       1
      / \
     2   3
    / \ / \
   4  5 6  7

2. 完全二叉树(Complete Binary Tree)

除最后一层外都是满的,最后一层从左到右连续。

       1
      / \
     2   3
    / \ /
   4  5 6

特点:

  • 堆就是完全二叉树
  • 可以用数组高效存储

3. 平衡二叉树(Balanced Binary Tree)

任意节点的左右子树高度差不超过1。

4. 二叉搜索树(BST)

详见 二叉搜索树

💻 节点定义

Go

type TreeNode struct {
    Val   int
    Left  *TreeNode
    Right *TreeNode
}

🔄 二叉树遍历

📊 遍历对比

遍历方式访问顺序应用场景空间复杂度
前序根-左-右复制树、序列化O(h)
中序左-根-右BST有序输出O(h)
后序左-右-根删除树、计算O(h)
层序逐层访问BFS、最短路径O(w)

h 为树高,w 为树的最大宽度

🎯 基本操作

🎯 路径问题

🎯 构造问题

经典题目

遍历相关

树的属性

路径问题

修改树结构

构造问题

其他

⚙️ 时间复杂度

操作时间复杂度说明
遍历O(n)访问每个节点一次
查找O(n)最坏情况需遍历所有节点
插入O(h)h为树高
删除O(h)h为树高
计算高度O(n)需访问所有节点

⚖️ 优缺点

优点

  • ✅ 结构清晰,递归处理简单
  • ✅ 适合表达层次关系
  • ✅ 搜索、排序效率高(BST)

缺点

  • ❌ 空间开销大(指针)
  • ❌ 非平衡树性能差
  • ❌ 删除操作复杂

🎨 应用场景

  1. 文件系统:目录结构
  2. 表达式树:编译器语法分析
  3. 决策树:机器学习
  4. DOM树:HTML/XML解析
  5. 数据库索引:B树、B+树

相关主题


返回:数据结构 | 算法学习导航