2008年(909)
分类:
2008-05-06 22:00:33
下载本文示例源代码
本文由DigitalConvict供稿。
原文出处:
环境: (无特别限制) 在VC6 上开发
我不会详细介绍二叉树理论的详细细节,因为这些东西,Per Nilsson 已经在他的“二叉树”中讨论过了,你可以在如下地址here找到详细的细节。
对半查找树对于找到在一个列表中很少变化的项来说是很有用的。添加和删除操作的开销是很大的,只主要是因为对半查找树的平衡性所决定的。
我们可以这样说这个类是在同一主题上的一个不同的执行方式。
执行细节
创建这棵树
要创建二叉树,可以简单的创建一个CSimpleBinaryTree 对象并初始化。
#define MAXELEMS 100 CSimpleBinaryTree btree; btree.Initialise(MAXELEMS,sizeof(CSomeObject));或
btree.Initialise(MAXELEMS,sizeof(CSomeObject), someCompareFunction);或
btree.Initialise(MAXELEMS,sizeof(CSomeObject), someCompareFunction, nGrowTrigger, nGrowByValue, nShrinkTrigger, nShrinkByValue);"someCompareFunction"是一个有两个指针参数的函数的指针,这个函数根据第一个参数是否小于,等于,大于第二个参数而分别返回负数,0和正数。CSimpleBinaryTree 提供了一个通用的全局比较函数,它可以比较两个长整型的指针。
CSomeObject sObj; CSomeObject *psObj1=&sObj; CSomeObject psObj2; int nResult; nResult=btree.AddItem(&sObj);或
nResult=btree.AddItem(psObj1);或
nResult=btree.AddItem(psObj1, psObj2);AddItem() 函数返回两个值。第一个是整型结果。如果子项被成功添加了,子项的索引值会被成功返回,如果没有成功添加,就会返回错误代码:
BOOL bResult; bResult=RemoveItem(nIndex);如果该项被成功地从树中删除了,函数返回TRUE, 否则返回FALSE;
int nIndex; nIndex = btree.FindItem(psObj);或
CSomeObject *pFoundObject; nIndex = btree.FindItem(psObj,pFoundObject);FindItem() 返回两个值.如果子项存在,第一个值就是子项的索引值,如果不存在,赋值为ITEM_NOT_PRESENT value.第二个返回值是可选择的第二个参数值。如果子项被发现了,pFoundObject 将指向它在树中的对象,如果子项没有被发现,pFoundObject 赋为空;
btree.ReSize(300);通过调用ReSize()可以设置树中可以容纳的最大子项数. 然而当树中已经存在200个元素并且其最大容纳子项数为250, 如果作如下调用btree.ReSize(100),那末树中开始的100元素 将会传送到新的指针数组上面,而后面的120个元素将会从树中被移除,其占用的内存也会被释放掉.
AddItem()
下载本文示例代码 简单二叉树类简单二叉树类简单二叉树类简单二叉树类简单二叉树类简单二叉树类简单二叉树类简单二叉树类简单二叉树类简单二叉树类简单二叉树类简单二叉树类 给主人留下些什么吧!~~
|