平衡二叉搜索树

平衡二叉搜索树

二叉搜索树的问题:

  • 添加:若从小到大添加元素,那么二叉搜索树将退化成链表
  • 删除:删除节点时也可能会导致二叉搜索树退化成链表

平衡(Banlance)

平衡:当节点数量固定时,左右子树的高度越接近,这棵二叉树就越平衡(高度越低)
最理想的状态就是像完全二叉树、满二叉树那样,高度是最小的。

解决方案

前提:节点的添加、删除顺序是无法限制的,可以认为是随机的。
改进方案:在节点的添加、删除操作之后,想办法让二叉搜索树恢复平衡(减小树的高度),同时添加、删除节点之后的调整次数一定要少,即用尽量少的调整次数达到适度平衡。

  • 一颗达到适度平衡的二叉搜索树,可以称之为:平衡二叉搜索树

两大猪脚--AVL树和红黑树

  • AVL树:Windows NT 内核中广泛使用
  • 红黑树:
    1. C++ STL(比如 map、set )
    2. Java 的 TreeMap、TreeSet、HashMap、HashSet
    3. Linux 的进程调度
    4. Ngix 的 timer 管理

一般也称它们为:自平衡的二叉搜索树(Self-balancing Binary Search Tree)

posted @ 2020-04-10 23:16  松鼠航  阅读(182)  评论(0编辑  收藏  举报