- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图论论文 基于二叉查找树的数据搜索
基于二叉查找树的数据搜索
学 院 计算机学院
专 业 计算机应用
姓 名 朱守勤
学 号 S080203123
电 话
【摘要】: 二叉查找树是二叉树的一个特化,它具有的特殊性质是:对于树中的任何一个结点,它的左子树的所有结点的关键字都小于此结点的关键字,而右子树的所有结点的关键字都大于此结点的关键字。二叉查找树的这种特殊性质使得它在查找元素的时候特别的方便,每一次查找都可以去掉一半的元素,因此查找的时间是O(logN)。
【关键字】:二叉查找树;二叉树;O(logN)
1 背景知识
1.1 二叉树简介
二叉树是层级式数据结构,它允许以一维数据形式插入和快速最近邻查找。它可以被用于替代快速排序和二分查找来快速找到一个数组中的最近点。二叉树有结构简单的优点,这允许它对多维数据能够通用化。因此,理解它是怎样工作,怎样执行数据搜索是很有用的。
1.2 二叉树的建立
???? 首先,定义一颗树。一棵树是有一个节点集构成的数据结构。每一个节点都链接其他的一些节点,即所谓的父节点和子节点。它们之间的不同是子节点是按照某种规则选择的而父节点链节只是怎样访问过一个给定的节点的历史。
二叉树有两个子树——左子树和右子树以及一个父节点。对于最近邻查找和树的优化父节链结必要的。
树的每一个节点包含值为X的某种类型的数据。左子节点的X值必须比相对应的的右节点的值要小——XLeft-X并且Right-XX。 这是二叉树的基本准则。树也必须有一个根节点Root。根节点是唯一个没有父节点的节点。但一个值为X的新节点加入到树中的时候,总是从根节点开始向下行直到找到一个空位。每次当经过一个节点时,就通过比教值X和这个节点的值的大小来决定是向左还是向右,如果X较小,则向左,如果较大则向右。
2 基于二叉查找的数据搜索
2.1 初始化数据
为了更好的测试程序,随机的找出几个数据并且是无序的。本程序选的
数据是:0,7,2,8,3,19,5,22,34,12,17,23,1,44,55,24,88,66,33,10。
首先,利用一维数组存储这些数据以便经常的使用。
int Data[Max]={0,7,2,8,3,19,5,22,34,12,17,23,1,44,55,24,88,66,33,10}; //数据数组
为了能清晰的看到电脑用了几次搜索到所要找的数字,在这里我设置了一个计数器。
int Counter; //计数器
2.2 二叉查找树的建立
从只包含一个定点的树开始。指定列表中第一个项作为这个根的关键字。为了添加新的项,首先比较它与已经在树里的顶点的关键字,从根开始,若这个项小于所比较顶点的关键字而且这个顶点有左儿子,则向左移动,或者若这个项大于所比较顶点的关键字而且这个顶点没有右儿子,则向右移动。当这个项小于所比较顶点的关键字而且这个顶点没有左儿子时,就插入以这个项作为关键字的一个新顶点来作为这个顶点的左儿子。同理,当这个项大于所比较顶点的关键字而且这个顶点没有右儿子时,就插入以这个项作为关键字的一个新顶点来作为这个顶点的右儿子。
建立二叉查找树
void Create_Tree(int *Data)
{
BTree New; // 新指针变量
BTree Current; //目前指针
BTree Father; //父节点指针
int i;
for(i=0;iMax;i++)
{
New = new TreeNode; // 申请新节点
New-Key=Data[i]; //新指针为输入的数据
New-Left=NULL; //左子树节点
New-Right=NULL;
if(Root==NULL) //当根节点未连接任何子树时
Root = New; // 根节点为新节点
else
{
Current = Root;
while(Current != NULL)
{
Father = Current;
if(Current-Key = Data[i])
Current = Current-Left;
else
Current = Current-Right;
}
if(Father-Key Data[i])
Father-Left = New;
else
Father-Right = New;
文档评论(0)