平衡二叉树的实现原理
2015-04-02 17:59
183 查看
平衡二叉树引入了平衡因子BF(Balance Factor),根据平衡因子可以构造平衡二叉树以及判断该二叉树是否一棵平衡二叉树!
BF的定义:二叉树上的结点上的左子树的深度值与右子树的深度值之差,如果绝对值小于等于1,表示该树是平衡二叉树!
举例判断是否平衡二叉树:
图1:
从9结点看,9的左子树的深度是2,右子树是0,2-0=-2,所以不满足平衡二叉树的条件!
平衡二叉树的优势,看图:
将3 2 1 4 5 6 7 10 9 8这几个数构造成一棵二叉树,由于这样的树的高度很高,查找起来还不如没有构成树的速度快!
构造平衡二叉树的实现实例:
通过对3 2 1 4 5 6 7 10 9 8进行构造一棵平衡二叉树,如图演示步奏:
图1:插入3 2 1
图1的3结点的左子树的高度2 - 右子树0=-2,此时不满足条件平衡二叉树的条件,左高的话我们可以进行右旋转,如图2:
图2:
图3:插入结点4
图4:插入5
插入了5之后,上图4可以看出2和3两个结点都发生了不平衡,此时我们从3结点进行纠正,3结点的左子树深度0 - 右子树深度2 =-2,左边不平衡,所以我们进行左旋转,
如图5:
图5:
图6:插入6
插入6后,2结点的左子树深度1- 右子树深度3=-2,此时我们需要进行左旋转,如图7:
图7:
插入7,如图8:
图8可以看到5的左子树深度0 - 右子树深度2=-2,所以需要进行左旋转,如图9:
图9:
插入10,如图10:
插入9,图11:
从图中可以看出4结点的BF为-2,6结点的BF为-2,7的结点的BF为-2,但是10的BF 切为1,所以我们此时先对10进行调整,此时需要右转,如图
图12:
图12,7的BF 因子为-2,所以我们对7进行左旋转,如图13:
图13:
插入8,如图14:
插入8之后导致4的BF=-2,6的BF=-2,而9的BF值为1,符号和前面的不对,所以我们对9进行调整,进行左旋转,如图15:
图15:
从图15,看到4的BF=-2,6的BF=-2,那么我们就先调整6的结点,进行左旋转,看图16:
图16
BF的定义:二叉树上的结点上的左子树的深度值与右子树的深度值之差,如果绝对值小于等于1,表示该树是平衡二叉树!
举例判断是否平衡二叉树:
图1:
从9结点看,9的左子树的深度是2,右子树是0,2-0=-2,所以不满足平衡二叉树的条件!
平衡二叉树的优势,看图:
将3 2 1 4 5 6 7 10 9 8这几个数构造成一棵二叉树,由于这样的树的高度很高,查找起来还不如没有构成树的速度快!
构造平衡二叉树的实现实例:
通过对3 2 1 4 5 6 7 10 9 8进行构造一棵平衡二叉树,如图演示步奏:
图1:插入3 2 1
图1的3结点的左子树的高度2 - 右子树0=-2,此时不满足条件平衡二叉树的条件,左高的话我们可以进行右旋转,如图2:
图2:
图3:插入结点4
图4:插入5
插入了5之后,上图4可以看出2和3两个结点都发生了不平衡,此时我们从3结点进行纠正,3结点的左子树深度0 - 右子树深度2 =-2,左边不平衡,所以我们进行左旋转,
如图5:
图5:
图6:插入6
插入6后,2结点的左子树深度1- 右子树深度3=-2,此时我们需要进行左旋转,如图7:
图7:
插入7,如图8:
图8可以看到5的左子树深度0 - 右子树深度2=-2,所以需要进行左旋转,如图9:
图9:
插入10,如图10:
插入9,图11:
从图中可以看出4结点的BF为-2,6结点的BF为-2,7的结点的BF为-2,但是10的BF 切为1,所以我们此时先对10进行调整,此时需要右转,如图
图12:
图12,7的BF 因子为-2,所以我们对7进行左旋转,如图13:
图13:
插入8,如图14:
插入8之后导致4的BF=-2,6的BF=-2,而9的BF值为1,符号和前面的不对,所以我们对9进行调整,进行左旋转,如图15:
图15:
从图15,看到4的BF=-2,6的BF=-2,那么我们就先调整6的结点,进行左旋转,看图16:
图16
相关文章推荐
- 平衡二叉树——AVL树的原理和实现
- AVL树 平衡二叉树 简介及实现原理
- 平衡二叉树的实现原理 - 数据结构和算法77
- 平衡二叉树的实现原理
- 平衡二叉树的实现原理
- 平衡二叉树的实现原理
- 平衡二叉树的实现原理(代码实现)- 数据结构和算法78
- 平衡二叉树的实现原理(代码实现)
- C# 2.0 中Iterators的改进与实现原理浅析
- P2P之UDP穿透NAT的原理与实现 [转]
- P2P 之 UDP穿透NAT的原理与实现-转自CSDN[hBifTs]
- C# 2.0 中Iterators的改进与实现原理浅析
- 利用泛解析实现二级域名原理以及程序
- 一个小语言的词法分析程序原理及其实现(2)
- .NET 1.1中预编译ASP.NET页面实现原理浅析 [1] 自动预编译机制浅析
- 基于IMD的包过滤防火墙原理与实现
- RunDll32 的使用方法与实现原理
- CLR 中匿名函数的实现原理浅析
- OICQ登录号码清除器实现原理
- 自解压的jar实现原理