摘要:
定义堆:堆是一棵完全二叉树,完全二叉树是指树的每一层节点都被填满,除了最后一层,最后一层 节点也要要求从最左边开始连续的排。 通常用一个数组存储堆:如下图所示 可见用数组存储堆就是按照层次遍历的顺序将堆中各个元素存入数组,下面计算堆中元素在数组中的指标位置。 假设堆中元素A位于堆的第 i 层 第 j 列,堆的根节点几位第 0 层,则可计算 A 在数组的位置(从1开始)为 t_p=\sum_{k=... 阅读全文
posted @ 2011-10-04 22:25
哈哈开心
阅读(501)
评论(0)
推荐(0)
摘要:
下面用一个例子来测试AVL树的平衡性 随机的反复插入和删除树中的节点,如代码所示:#include <iostream>#include "AVL.h"#include "IntClass.h"#include <time.h>#include <stdlib.h> #include "StringClass.h"using namespace std;int main(){BSTree bstr... 阅读全文
posted @ 2011-10-04 20:43
哈哈开心
阅读(777)
评论(0)
推荐(1)
摘要:
下面直接给出AVL树的实现代码,主要是基于前面的二叉查找树的基类实现方法的代码。 这里是直接修改原来的代码的,后面将会把它更新为继承的方式。 BinaryTreeNode.h 仅加入了一个balance平衡因子的数据成员和它的get,set方法//此类为AVL查找树的树节点类 //定义的关键子,值,父节点和儿子节点 #ifndef BINARY_TREE_NODE_H#define BINARY... 阅读全文
posted @ 2011-10-04 16:05
哈哈开心
阅读(1384)
评论(0)
推荐(1)
摘要:
定义:一棵空二叉树是AVL树,如果T是非空二叉树,TL和TR分别是其左子树和右子树,则当且仅当TL和TR都为AVL树且|HL-HR|<=1时,T是AVL树。由定义知道一个AVL树的任何节点的左右子树的高度之差不超过1,这是AVL树最基本的特征。AVL树的高度:(固定节点数计算最大高度)记N_h为一棵高度为h的AVL树具有的最小节点数,则最坏情况是它的左右子树的高度不等,一个是N_(h-1)和N_(h-2),从而得到N_h=N_(h-1)+N_(h-2)+1 N_0=0,N_1=1这类似于Fibonacci数列:F_n=F_(n-1)+F_(n-2),(F_0=0,F_1=1)而F_h=( 阅读全文
posted @ 2011-10-04 15:52
哈哈开心
阅读(10402)
评论(1)
推荐(2)