平衡树 17.7.21

1.二叉排序树 

  二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树。

  定义:

   二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:

    (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;

    (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;

    (3)左、右子树也分别为二叉排序树;

    (4)没有键值相等的节点。

  主要操作:

    (1)遍历(小到大)

    (2)查找结点

    (3)求子树的最大最小值

    (4)求前趋和后继结点

    (5)插入结点

    (6)删除结点

  简单描述:

    (1)最大值:左孩子的左孩子的……左孩子的左孩子

    (2)小值:右孩子的右孩子的……右孩子的右孩子

    (3) 前趋:

      <情况一:>有左子树,则左孩子的右孩子的右孩子的右孩子……的右孩子。

      <情况二:>无左子树,且为父结点的右孩子,则为父结点。

      否则无前趋。

    (4)后继:

      <情况一:>有右子树,则右孩子的左孩子的左孩子的左孩子……的左孩子。

      <情况二:>情况二:无右子树,且为父结点的左孩子,则为父结点。

      否则无后继。

     (5)删除结点:

      <情况一:>结点为叶子结点,则直接删除结点,把父结点的对应指针设为NULL。

      <情况二:>结点有一个孩子,则把结点的孩子代替结点的位置。

      <情况三:>结点左、右孩子都有,则把结点的左孩子代替结点的位置,把右孩子接到左孩子的最右边。也可以找到结点的直接前驱(或直接后继),用直接前驱(或后继)来替换删除结点,然后再删除直接前驱(或后继)结点。(这种方法较麻烦!!!)如图两种情况:

                                    

     模板题:https://www.luogu.org/problem/show?pid=3369

         题解:   http://www.cnblogs.com/zwfymqz/p/7151959.html#_label2

2.SPLAY伸展树

  简介:

    伸展树(Splay Tree)是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。它由Daniel Sleator和Robert Tarjan创造。伸展树是一种自调整形式的二叉查找树,它会沿着从某个节点到树根之间的路径,通过一系列的旋转把这个节点搬移到树根去。    摊平时间是指在一系列最坏情况的操作序列中单次操作的平均时间。  类别:二叉排序树     空间效率:O(n)         时间效率:O(log n)内完成插入、查找、删除操作 功能超级强大!!

  简单介绍一下操作:

    SPLAY树的基本操作:

       (1)旋转和伸展

       (2)查找

       (3)插入、删除

       (4)最大最小值

        (5)前驱后继

        (6)合并、分离

  详细介绍一下:

 

差不多就这些了,对于指针版的代码,并不懂。

3.AVL树:

  

摘自 teacher'ppt。

原文地址:https://www.cnblogs.com/lyqlyq/p/7218298.html