• 二叉排序树和平衡二叉树


    二叉排序树又称二叉查找树或二叉搜索树。 它一棵空树或者是具有下列性质:

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

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

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

    查找的时候总是从根节点进行比较然后逐级往下进行。

    由于它是一种树形结构,所以相对于顺序存储结构来说,进行插入或者删除操作的时候效率较高,但是其查找性能是是不确定的(依赖于书的形状),例如如果每个节点都只有左孩子而没有右,则查找相当于从头找到尾,而如果每个节点的左右孩子深度差不多相等,则相当于二分查找。

    鉴于上述原因,则需要在构造树的形状时尽量左右平衡,以提高查找效率,所以就出现了平衡二叉树(AVL树)

    平衡二叉树或为空树,或为如下性质的二叉排序树:

      1)左右子树深度之差的绝对值不超过1;

      2)左右子树仍然为平衡二叉树.

    平衡因子BF=左子树深度-右子树深度.

    平衡二叉树每个结点的平衡因子只能是10-1。若其绝对值超过1,则该二叉排序树就是不平衡的。

    最小不平衡子树:距离插入结点最近,且平衡因子的绝对值大于1的结点为根的子树。

    平衡二叉树的构造思想:

    构建的过程中,每插入一个结点,先检查是否因为插入而破坏了树的平衡性,若是,则找出最小不平衡子树。在保持二叉排序树的前提下,调整最小不平衡子树中各个结点之间的链接关系,进行相应的旋转,使之成为新的平衡子树。

    程序的具体实现方法可以参见《大话数据结构》一书

  • 相关阅读:
    linux初学者-ftp篇(一)
    随机密码生成
    倒计时问题java
    百钱买鸡
    去7JAVA
    贪吃蛇Controller Java实现(二)
    贪吃蛇Global Java实现(二)
    贪吃蛇GamePanel Java实现(二)
    贪吃蛇Listener Java实现(二)
    贪吃蛇snake Java实现(二)
  • 原文地址:https://www.cnblogs.com/bewolf/p/4182004.html
Copyright © 2020-2023  润新知