构造方法

平衡二叉树

对于二叉查找树,尽管查找、插入及删除操作的平均运行时间为

O(logn)

,但是它们的最差

运行时间都是

O(n),

原因在于对树的形状没有限制。

平衡二叉树又称为

AVL

树,它或者是一棵空树,或者是有下列性质的二叉树:它的左子树

和右子树都是平衡二叉树,

且左右子树的深度之差的绝对值不超过

1

二叉树的的平衡因子

BF

为:

该结点的左子树的深度减去它的右子树的深度

,则平衡二叉树的所有结点的平衡因

子为只可能是:

-1

0

1

一棵好的平衡二叉树的特征:

(

1

)保证有

n

个结点的树的高度为

O(logn)

(

2

)容易维护,也就是说,在做数据项的插入或删除操作时,为平衡树所做的一些辅助操

作时间开销为

O(1)

一、平衡二叉树的构造

在一棵二叉查找树中插入结点后,

调整其为平衡二叉树。

若向平衡二叉树中插入一个新结点

后破坏了平衡二叉树的平衡性。首先要找出插入新结点后失去平衡的最小子树根结点的指

针。

然后再调整这个子树中有关结点之间的链接关系,

使之成为新的平衡子树。

当失去平衡

的最小子树被调整为平衡子树后,

原有其他所有不平衡子树无需调整,

整个二叉排序树就又

成为一棵平衡二叉树

1.

调整方法

(

1

)插入点位置必须

满足二叉查找树的性质

,即任意一棵子树的左结点都小于根结点,

右结点大于根结点

(

2

)找出插入结点后

不平衡的最小二叉树

进行调整,如果是整个树不平衡,才进行整个

树的调整。

2.

调整方式

(

1

)

LL

LL

型:插入位置

为左子树的左结点,进行向右旋转

高度平衡二叉树的构建_平衡二叉树 构造方法(绝妙)相关推荐

  1. 高度平衡二叉树的构建_平衡二叉树(AVL)树

    1.平衡二叉树定义 是一种二叉排序树(二叉查找树.二叉搜索树),其中每个节点的左子树和右子树的高度差不大于1.(左右子树也是平衡二叉树) 平衡因子BF = 二叉树节点的左子树深度减去右子树深度 = 节 ...

  2. 高度平衡二叉树的构建_平衡二叉树建立及其增删改查(JAVA)

    平衡二叉树:指的是左右子树高度差的绝对值不超过一的二叉排序树. 主要思路:1.用左高度跟右高度代替平衡因子,大于1进行L~调整,小于-1进行R~调整 2.每次插入都通过递归计算一次各结点高度,然后进行 ...

  3. 高度平衡二叉树的构建_数据结构与算法系列(十六)平衡二叉树的构建实现过程演示...

    我们在上一篇文章中分享了平衡二叉树的定义和实现原理,这一节我们来演示如何通过代码实现平衡二叉树,最后分析下平衡二叉树的算法复杂度. 实例演示 在开始之前,我们先通过一个对比来加强理解,在没有介绍平衡二 ...

  4. 平衡二叉树的旋转_平衡二叉树的旋转

    一.平衡二叉树的定义 为避免树的高度增长过快,降低二叉树的排序性能,规定在插入和删除二叉树结点时,保证任意结点的左右子树高度差的绝对值不大于1.这样的二叉树被称为平衡二叉树(Balanced Bina ...

  5. 平衡二叉树及其操作实现_平衡二叉树(AVL树)及C语言实现

    上一节介绍如何使用二叉排序树实现动态查找表,本节介绍另外一种实现方式--平衡二叉树.平衡二叉树,又称为 AVL 树.实际上就是遵循以下两个特点的二叉树: 每棵子树中的左子树和右子树的深度差不能超过 1 ...

  6. c++ 删除二叉树的子树_平衡二叉树

    二叉树 二叉数是每个节点最多有两个子树,或者是空树(n=0),或者是由一个根节点及两个互不相交的,分别称为左子树和右子树的二叉树组成. 满二叉树 有两个非空子树(二叉树中的每个结点恰好有两个孩子结点切 ...

  7. 带父节点的平衡二叉树_平衡二叉树 通俗易懂

    平衡二叉树(AVL) 阅读之前请先了解 二叉搜索树 平衡二叉树定义:任意节点的子树的高度差都小于等于 1 1. 为什么使用「平衡二叉树」 二叉树能提高查询的效率 O(logn),但是当你插入 {1,2 ...

  8. 机器学习特征构建_使用Streamlit构建您的基础机器学习Web应用

    机器学习特征构建 Data scientist and ML experts often find it difficult to showcase their findings/result to ...

  9. 二叉树 平衡二叉树 红黑树_迅捷树,二叉树

    二叉树 平衡二叉树 红黑树 In this tutorial, we'll be discussing the Data Structure Trees and implement it using ...

最新文章

  1. 【分治】P1228 地毯填补问题(多联骨牌覆盖棋盘问题)(递归,分治)难度⭐⭐⭐
  2. MySQL 到底是怎么解决幻读的?
  3. postgresql如何实现group_concat功能
  4. 分享两个好用的nosql GUI工具
  5. mybatis接口动态代理原理
  6. (转)基于Ajax的应用程序架构汇总
  7. 工作中不要扯虎皮吓唬人
  8. 固态硬盘受损或数据删除,怎么办?详解各种恢复SSD数据方法
  9. 佳能MG2580S清零
  10. docker如何配置阿里云加速器
  11. mysql登录密码mysql重置root密码
  12. 如何解决Worm.Win32.AutoRun.bqn(文件夹改exe病毒)
  13. android 怎么选择audio hal
  14. HDOJ 5296 Annoying problem
  15. unity 刷新layout_【Unity源码学习】Layout
  16. 关于周报的写法和原则
  17. 删除PDF其中几页的方法
  18. html缩放惯性,js带滚动惯性的视觉差特效插件
  19. Java系统答辩提问问题_宿舍管理系统答辩问题总结
  20. [Oracle]-[recyclebin][索引]-回收站恢复的索引名称修改

热门文章

  1. linux系统访问bitlocker分区,BitLocker 操作命令
  2. 红外线发射器与接收器模块使用教学
  3. Netty | 开启 Linux 平台下的 Native
  4. css3 flex弹性盒子布局梳理,打通任督二脉
  5. python_pandas操作-数值上下滑动一个格
  6. R语言里的非线性模型:多项式回归、局部样条、平滑样条、 广义相加模型GAM分析
  7. 轨道交通通信施工学习总结(三)区间光电缆敷设
  8. 爬虫新手入门(二):爬取一本言情小说的内容
  9. Codewars刷题升级 (Python)5Kyu Pete, the baker 皮特,面包师
  10. python实例(一):验证输入的手机号码是否为中国移动手机号码