跳到主要内容

树是一种层级数据结构,由节点和边组成。它适合表示具有父子关系的数据。

常见场景:

  • 文件目录;
  • 组织架构;
  • HTML DOM;
  • 数据库索引;
  • 表达式解析。

一、基本概念

概念说明
根节点树的起点
父节点一个节点的上级
子节点一个节点的下级
叶子节点没有子节点的节点
深度从根到该节点的路径长度
高度从该节点到叶子的最长路径

二、二叉树

二叉树中每个节点最多有两个子节点,通常称为左孩子和右孩子。

typedef struct Node {
int data;
struct Node *left;
struct Node *right;
} Node;

三、遍历方式

遍历顺序
前序遍历根 -> 左 -> 右
中序遍历左 -> 根 -> 右
后序遍历左 -> 右 -> 根
层序遍历按层从上到下

二叉搜索树的中序遍历结果是有序的。

四、二叉搜索树

二叉搜索树满足:

  • 左子树所有节点小于根节点;
  • 右子树所有节点大于根节点;
  • 左右子树也都是二叉搜索树。

查找、插入、删除平均复杂度为 O(log n),但退化成链表时会变成 O(n)。

五、常见树结构

  • 满二叉树;
  • 完全二叉树;
  • 平衡二叉树;
  • B 树;
  • B+ 树;
  • 红黑树;
  • Trie 字典树。

六、练习

  • 创建二叉树。
  • 实现前序、中序、后序遍历。
  • 计算树的高度。
  • 统计叶子节点数量。
  • 实现二叉搜索树查找和插入。