数据结构-树-笔记

* 满二叉树:最后一层没有子节点,其余每个节点都有两个子节点
* 完全二叉树:除最后一层的其余部分为满二叉树,最后一层的节点连续集中在左边

* 前序遍历:根-左-右
* 中序遍历:左-根-右
* 后序遍历:左-右-根

一、线段树
  • 适用于区间查询等场景
  • 插入和查询的时间复杂度均为log(n)
  • 是平衡二叉树(但全树的高度差不会超过1,其与完全二叉树的区别在于,线段树最底层的叶子节点可能在右侧)
二、字典树
1. 特点
  • 查询时间复杂度为O(w),w为单词长度
  • 多叉树结构
三、二分搜索树
1. 特点
  • 每个节点的值必须大于左子树的所有节点的值,小于右子树所有节点
  • 每棵子树也为二分搜索树
  • 不一定为完全二叉树
  • 二分搜索树必须有比较性(但支持重复值)
  • 中序遍历得到顺序序列,左-根-右右-根-左改变升降序
  • 顺序插入时,会退化成链表
三、平衡二叉树(AVL)
1. 特点
  • 对于任意一个节点,左右子树的高度差不超过1(全树的高度差可能超过1)
  • 插入和删除时需要维护。
    • 记录每个节点的高度,计算左右子树高度差(平衡因子)
    • 平衡因子的绝对值大于1时,进行旋转操作
四、2-3树
1. 特点
  • 满足二分搜索树的性质
  • 节点可以存放1个或者2个元素
  • 是一棵绝对平衡树
  • 添加节点时通过冒泡、融合来维护树的绝对平衡性
五、红黑树
1. 特点
  • 根节点、每一个叶子节点(最后的空节点)、红色节点的孩子均为黑色
  • 任意节点到叶子节点,经过的黑色节点是一样的
  • 是一颗平衡树
  • 黑色节点表示2-3树中的2节点
  • 红色节点一律向左倾斜,逻辑上为其父亲节点的附属节点,共同表示2-3树种的3节点
  • 最大高度为2logn,增删改查都是O(logn)
  • 进行元素的查找相比AVL慢一点,因为最大高度大于AVL树
  • 增加元素和删除元素比AVL树更快,如果数据多变,则使用红黑树更优
六、B树
  • 多路查找平衡树,降低IO次数
七、B+树
  • 多路查找平衡树
  • 只在叶子节点存储数据
  • 所有叶子节点构成有序链表,方便范围查询

推荐阅读更多精彩内容