对二叉排序树T作相关操作.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
对二叉排序树T作相关操作.doc

对二叉排序树T作相关操作 一、程序中所采用的数据结构及存储结构的说明 程序中的数据采用“树形结构”作为其数据结构。具体的,采用的是“二叉排序树”。 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:(1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)它的左右子树也分别为二叉排序树。 程序中分别采用了“二插链表”和“一维数组”作为其存储结构。二插链表存储结构中二插树的结点由一个数据元素和分别指向其左、右子树的两个分支构成。如:程序中采用的结构是: typedef struct Tnode{ int data; /*数据元素*/ struct Tnode *lchild,*rchild;/*左右指针*/ }*node,BSTnode; 一维数组顺序表存储结构是用一组地址连续的存储单元依次自上而下、自左而右存储完全二插树上的结点元素,即将完全二叉树上编号为i的结点元素存储在如上定义的一维数组中下标为i-1的分量中。利用顺序表作为存储结构: typedef struct { int *data; /*一维数组基址*/ int lenth; /*一维数组的长度*/ }BST; 一维数组存储结构中结点i的父母亲为|_i/2_|,左孩子为2i,右孩子为2i+1.二、算法的设计思想 a)二插链表作存储结构: 建立二插排序树采用边查找边插入的方式。查找函数采用递归的方式进行查找。如果查找成功则不应再插入原树,否则返回当前结点的上一个结点。然后利用插入函数将该元素插入原树。对二叉树进行中序遍历采用递归函数的方式。在根结点不为空的情况下,先访问左子树,再访问根结点,最后访问右子树。计算二插排序树的平均查找长度时,仍采用类似中序遍历的递归方式,用s记录总查找长度,j记录每个结点的查找长度,s置初值为0,采用累加的方式最终得到总查找长度s。平均查找长度就等于s/i(i为树中结点的总个数)。 删除结点函数,采用边查找边删除的方式。如果没有查找到,则不对树做任何的修改;如果查找到结点,则分四种情况分别进行讨论:1、该结点左右子树均为空;2、该结点仅左子树为空;3、该结点仅右子树为空;4、该结点左右子树均不为空。 判断二插排序树是否为平衡二叉树的函数,也是采用递归函数的方式,分别判定以树中每个结点为根结点的子树是否为平衡二叉树。只要有一个子树不为平衡二叉树,则该树便不是平衡二叉树。 b)一维数组作存储结构 : 建立二插排序树,首先用一个一维数组记录下读入的数据,然后再用边查找边插入的方式将数据一一对应放在完全二叉树相应的位置,为空的树结点用“0” 补齐。 中序遍历二叉树也采用递归函数的方式,先访问左子树2i,然后访问根结点i,最后访问右子树2i+1.先向左走到底再层层返回,直至所有的结点都被访问完毕。 计算二插排序树的平均查找长度时,采用类似中序遍历的递归方式,用s记录总查找长度,j记录每个结点的查找长度,s置初值为0,采用累加的方式最终得到总查找长度s。平均查找长度就等于s/i(i为树中结点的总个数)。 删除二插排序树中某个结点,采用边查找边插入的方式,类似重新建立一个一维数组作为存储新树的空间。将原数组中的数据一个一个的插入树中,若遇到需要删除的结点则不执行插入操作。 判断二插排序树是否为平衡二叉树的函数,也是采用递归函数的方式,分别判定以树中每个结点为根结点的子树是否为平衡二叉树。只要有一个子树不为平衡二叉树,则该树便不是平衡二叉树。 三、平衡二叉树与未平衡化的二叉树查找效率比较 (1)对于未平衡化的二叉树: 当先后插入的关键字有序时,构成的二插排序树蜕变为单支树。树的深度为n,其平均查找长度为(n+1)/2.这是最差的情况。这种情况下比较关键字的最大次数为n次。 (2)最好的情况是: 建成的树是一棵平衡二叉树。在这种情况下,二插排序树的平均查找长度和log2(n)成正比。比较关键字的最大次数为:0.5logψ(5)+logψ(n+1)-2次(其中ψ=(1+根号5)/2)。 (3)那么,平均情况下分析: 假设在含有n(n=1)个关键字的序列中,i个关键字小于第一个关键字,n-i-1个关键字大于第一个关键字,则由此构造而得的二插排序树在n个记录的查找概率相等的情况下,其平均查找长度为:P(n,i)=[1+i*(P(i)+1)+(n-i-1)(P(n-i-1)+1)]/n其中P(i)为含有i个结点的二插排序树的平均查找长度,则P(i)+1为查找左子树中每个关键字时所用比较次数的平均值,P(n-i-1)+1为查找右

文档评论(0)

wsh1288 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档