zoukankan      html  css  js  c++  java
  • 平衡二叉树(笔记)

    先介绍排序二叉树。

    排序二叉树

    定义:

      1.若左子树非空,则左子树的所有节点的值小于它的根节点。

      2.若右子树非空,则右子树的所有节点的值大于它的根节点。

      3.左右子树也分别为排序二叉树。

    意义:排序二叉树的作用是在插入或者构建这棵树时,就是在对一个无序数列的一个排序过程!并且采用了二分思想,但是一般时间复杂度为log(n),最坏的情况依旧是O(n)

    例如,最坏的情况如下:

                  

    那为了避免这种最坏的情况的出现,就对排序二叉树进行了进一步优化(方法有很多,不止这一种方法),那么也就是这篇博客讲的平衡二叉树。

    我们可以认为平衡二叉树是排序二叉树的一种改进或者说是一种特殊的例子。


    平衡二叉树

    平衡二叉树是为了解决排序二叉树左右子树深度不均所引入的一种特殊得排序二叉树。

    那么,使得任何一个节点的左右子树的深度差不超过1的二叉树,就可以充分利用二分思想来实现lob(n)的查找和插入。

    注意:是在插入操作时,进行特殊操作的,而不是把排序二叉树给出后再进行特殊操作。

    这样的话,其实,每一次操作都是一个小范围内的特殊操作。

    插入的情况分为4种,左左,右右,左右,右左。

    一,左左

    二,右右

    三,左右,右左

    这个其实就不是那么简单的旋转了。

    分为两次旋转,(过程是把左右和右左情况通过第一次旋转变成左左,右右的情况)

    大家可能会对值为2的节点的旋转情况不理解,其实不用管旋转的方向,因为,需要中间过程的每一个新的二叉树都必须是二叉树所以,节点值为2,必须是插入在1和5之间,然后再把它理解是一直种旋转!

    好了,右左的情况也是一样的逻辑。

  • 相关阅读:
    《Programming WPF》翻译 第8章 1.动画基础
    一些被遗忘的设计模式
    《Programming WPF》翻译 第4章 数据绑定
    《Programming WPF》翻译 第3章 控件
    《Programming WPF》翻译 第5章 样式和控件模板
    《Programming WPF》翻译 第7章 绘图
    《Programming WPF》翻译 第9章 自定义控件
    《Programming WPF》翻译 第7章 绘图 (2)
    《Programming WPF》翻译 第8章 前言
    关于Debug和Release之本质区别
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/10116097.html
Copyright © 2011-2022 走看看