zoukankan      html  css  js  c++  java
  • 平衡二叉树你了解吗?

            数据结构在自考的时候学过,所以一些简单的概念大概了解,可是必然考纲不一样,所以在软考中还是会有一些陌生的知识,如今就说一下平衡二叉树

    一、什么是平衡二叉树

          依据二叉树的基本概念可想到:平衡二叉树的左右子树都是平衡二叉树;除此之外,左子树和右子树的高度差的绝对值不能超过1

    二、平衡二叉树的作用

         由于在二叉排序树查找过程中,仅仅有树的形态比較均匀的时候,查找效率才干比較好,因此採用平衡二叉树能够使得在构造二叉排序树的时候使得其保持均匀,从而能够提高查找效率;所以平衡二叉树一定是二叉排序树。

    三、平衡二叉树的插入

        插入的情况分为四类:左子树的左子树插入,右子树的右子树插入,左子树的右子树插入,右子树的左子树插入;依据四种插入的情况,有四种调整平衡的规律,归纳例如以下:

    1)单向右旋(针对于左子树的左子树插入结点点1)


    2)单向左旋(针对于右子树的右子树插入结点5)


    3)先左后右双向旋转(针对于左子树的右子树插入结点3


    4)先右后左双向旋转(针对于右子树的左子树插入结点18)


    四、平衡二叉树的删除

            平衡二叉树的删除同二叉排序树的删除是一样的,可是须要在二叉排序树的基础上保持平衡。

    1删除叶子结点

              直接删除就可以,然后进行平衡调整

    2删除仅仅有一个子树的结点

             用要删除结点的左子树(右子树)取代删除结点,直接删除就可以,然后进行平衡调整

    3删除有两个子树的结点

            这样的情况比較复杂,可分两种情况进行删除操作:

           a.假设该节点的平衡因子为0或者1,则找到其左子树中具有最大值的节点max(中序遍历的直接前驱)将max的内容与x的内容交换,而且max即为新的要删除的节点

          b.假设该节点的平衡因子为-1,则找到其右节点中具有最小值的节点min(中序遍历的直接后继),将min的内容与x的内容交换,而且min即为新的要删除的节点。

           不要忘记删除后要进行平衡调整。

  • 相关阅读:
    2012个人总结与展望
    C++Event机制的简单实现
    string与char*比较 ——why use string
    创建型模式学习总结——设计模式学习笔记
    Bridge模式——设计模式学习笔记
    Singleton模式——设计模式学习
    Adapter模式——设计模式学习笔记
    C++ 申请连续的对象内存
    7 个致命的 Linux 命令与个人评论
    关于保存Activity的状态
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3984865.html
Copyright © 2011-2022 走看看