平衡二叉树 构造方法
转载:http://blog.csdn.net/zhuyingqingfen/article/details/6530434
平衡二叉树
对于二叉查找树,尽管查找、插入及删除操作的平均运行时间为O(logn),但是它们的最差运行时间都是O(n),原因在于对树的形状没有限制。
平衡二叉树又称为AVL树,它或者是一棵空树,或者是有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左右子树的深度之差的绝对值不超过1。二叉树的的平衡因子BF为:该结点的左子树的深度减去它的右子树的深度,则平衡二叉树的所有结点的平衡因子为只可能是:-1、0和1
一棵好的平衡二叉树的特征:
(1)保证有n个结点的树的高度为O(logn)
(2)容易维护,也就是说,在做数据项的插入或删除操作时,为平衡树所做的一些辅助操作时间开销为O(1)
一、平衡二叉树的构造
在一棵二叉查找树中插入结点后,调整其为平衡二叉树。若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性。首先要找出插入新结点后失去平衡的最小子树根结点的指针。然后再调整这个子树中有关结点之间的链接关系,使之成为新的平衡子树。当失去平衡的最小子树被调整为平衡子树后,原有其他所有不平衡子树无需调整,整个二叉排序树就又成为一棵平衡二叉树
1.调整方法
(1)插入点位置必须满足二叉查找树的性质,即任意一棵子树的左结点都小于根结点,右结点大于根结点
(2)找出插入结点后不平衡的最小二叉树进行调整,如果是整个树不平衡,才进行整个树的调整。
2.调整方式
(1)LL型
LL型:插入位置为左子树的左结点,进行向右旋转
由于在A的左子树B的右子树上插入了结点F,A的平衡因子由1变为了2,成为不平衡的最小二叉树根结点。第一次旋转A结点不动,先将B的右子树的根结点D向左上旋转提升到B结点的位置,然后再把该D结点向右上旋转提升到A结点的位置。
平衡二叉树 构造方法相关推荐
- 高度平衡二叉树的构建_平衡二叉树 构造方法(绝妙)
构造方法 平衡二叉树 对于二叉查找树,尽管查找.插入及删除操作的平均运行时间为 O(logn) ,但是它们的最差 运行时间都是 O(n), 原因在于对树的形状没有限制. 平衡二叉树又称为 AVL 树, ...
- 平衡二叉树 构造方法RR RL LL LR
对于二叉查找树,尽管查找.插入及删除操作的平均运行时间为O(logn),但是它们的最差运行时间都是O(n),原因在于对树的形状没有限制. 平衡二叉树又称为AVL树,它或者是一棵空树,或者是有下列性质的 ...
- 平衡二叉树平衡因子怎么计算_平衡二叉树(AVL Tree)旋转机制分析
平衡二叉树(AVL Tree) 概述 AVL树是以二分搜索树(BST)为底层数据结构而实现的,其特性是需要维护AVL的|平衡因子| <= 1 平衡因子 对于一个父节点的左右子树高度差的绝对值需要 ...
- MFC二叉树可视化绘制 (C++)—— 插入、删除、先序遍历、中序遍历、后序遍历、层序遍历(基于平衡二叉树实现)
界面展示: 相关文章目录 平衡二叉树的构造过程图解 C/C++平衡二叉树实现 -- 插入.删除.先序遍历.中序遍历.后序遍历.层序遍历(设计详解) MFC 在对话框中绘制图形的方法 -- 及二叉树绘制 ...
- kotlin中继承父属性使用构造方法
kotlin中继承父属性使用构造方法 1. 定义父类,给它两个属性: abstract class AbstractResponseMessage {private var success = tru ...
- kotlin重写构造方法编译报错:Primary constructor call expected
在kotlin中使用construct关键字定义构造方法,如果类定义时已经有构造方法(类名后带括号),需要添加构造方法时,需要使用以下写法: class User(var name,var age){ ...
- Java 构造方法与成员方法的区别
学而时习之,温故而知新. 先说下自己怎样区分它们 认定构造方法是:类名与构造方法相同,这个方法就是构造方法, 这个类中除了构造方法以外的方法都是成员方法,原因是在类中除了变量外的基本都是成员方法. 看 ...
- private关键字和构造方法
1.private: A: 是一个修饰符 B:可以 修饰成员变量,也可以修饰成员方法 C:被private修饰的成员只能在本类中访问 D:针对private修饰的成员变量,可以用getXxx()和se ...
- 构造方法与setXxx方法
构造方法:给属性进行初始化 Person p=new Person("kobe",23); p=new Person("KG",24);这种方式貌似看起来是改名 ...
最新文章
- XP硬盘安装Ubuntu 10.10双系统图解(转)
- 51nod 1256 乘法逆元(扩展欧几里得)
- ELK错误1_Kafka-Logstash-Elasticsearch过程,Elasticsearch报grokparsefailure错误
- Linux 主要的发行系统版本介绍
- HTML中直接写js 函数
- Redis运维和开发学习笔记(3)redis搭建集群
- 命令关闭手机蓝牙_iPhone手机这些实用的便捷功能,你知道多少?
- 用友未获得服务器信息,客户端查询银行日记账没有数据出现,其他客户端和服务器正常...
- java源码编译_java 源码编译
- python不可以安装的软件包_安装好的python包竟然无法import
- 傲腾机器Linux,【收藏】傲腾装机必看!
- beanshell断言_Jmeter之BeanShell断言使用(示例代码)
- PHP利用SMTP发送邮件,测试ok
- 利用 Python 特性在 Jinja2 模板中执行任意代码
- 服务器网口灯亮但显示未插网线,网线插路由器WAN口,但WAN口灯不亮怎么办?
- 计算机二级选择题瞎蒙,一级消防员考试,一级消防员考试题大全
- 想健身该怎么做?要练出肌肉需要多久?
- TortoiseGit commands(命令)(完整中文翻译)
- kafka监控api,手撕面试官
- R语言导入xlsx包错误: JAVA_HOME cannot be determined from the Registry