解析平衡二叉树
2016-12-11 20:45
169 查看
什么是平衡二叉树?
平衡二叉树(Balanced Binary Tree)又被称为AVL树(是一种二叉排序树),且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。何谓平衡因子?
若将二叉树上结点的平衡因子BF(Balance Factor)定义为该结点的左子树的深度减去它的右子树的深度,则平衡二叉树上所有结点的平衡因子只可能是-1,0和1。怎么样不平衡?
只要二叉树上有一个结点的平衡因子的绝对值大于1,则该二叉树就是不平衡的。如何使构成的二叉排序树成为平衡树?
什么是二叉排序树?
声明一点,二叉排序数的概念都懂吧,不懂也没关系,普及一下。二叉排序树(Binary Sort Tree)又称二叉查找树,或者是一颗空树;或者是具有下列性质的二叉树;1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;2)若他的右子树不空,则右子树上所有结点的值均大于它的根节点的值;3)它的左、右子树也分别为二叉排序树。构建
一般情况下,假设由于在二叉排序树上插入结点而失去平衡的最小子树根节点的指针为*a(即a是离插入结点最近,且平衡因子绝对值超过1的祖先结点),则失去平衡后进行调整的规律可归纳为下列4种情况:1)单向右旋平衡处理:由于在*a的左子树根结点的左子树上插入结点,*a的平衡因子由1增至2,致使以*a为根的子树失去平衡,则需进行一次向右的顺时针旋转操作。
简单示意图:
2)单向左旋平衡处理:由于在*a的右子树根结点的右子树上插入结点,*a的平衡因子由-1增至-2,致使以*a为根的子树失去平衡,则需进行一次向左的逆时针旋转操作。
简单示意图:
3)双向旋转(先左后右)平衡处理:由于在*a的右子树根结点的右子树上插入结点,*a的平衡因子由1增至2,致使以*a为根的子树失去平衡,则需进行两次旋转(先左旋后右旋)操作。
简单示意图:
4)双向旋转(先右后左)平衡处理:由于在*a的右子树根结点的左子树上插入结点,*a的平衡因子由-1增至-2,致使以*a为根的子树失去平衡,则需进行两次旋转(先右旋后左旋)操作。
简单示意图:
小结
到这里,平衡二叉树就告一段落了,如果有不完善之处还请多多指正。
相关文章推荐
- 剑指 offer代码解析——面试题39判断平衡二叉树
- 剑指 offer代码解析——面试题39判断平衡二叉树
- 剑指 offer代码解析——面试题39推断平衡二叉树
- 平衡二叉树解析
- 剑指 offer代码解析——面试题39判断平衡二叉树(高效方法)
- 剑指 offer代码解析——面试题39判断平衡二叉树(高效方法)
- 数据结构-5-平衡二叉树算法原理解析
- 常见设计模式的解析和实现(C++)之十七-State模式
- 手动建立makefile简单实例解析
- 常见设计模式的解析和实现(C++)之三-Builder模式
- 数据库表关系模型解析7——多对多数据模型中的一张表是自连接
- 网站架构方案全解析
- JavaScript中Date,Math,Global,Number等对象的浅析,Array数组对象的解析
- Spring MVC流程解析
- DBUnit整个流程解析
- 浏览器加载渲染网页过程解析--总结(三)
- 网站架构(页面静态化,图片服务器分离,负载均衡)方案全解析
- HTML5新增的表单元素和属性实例解析
- JCommander(命令行参数解析工具)
- 文件解析库doctotext安装和使用