- 1、本文档共63页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构PPT(第9章查找)讲述
R Q D 中序遍历:PL—D—R—Q 删除后: PL—R—Q PL R Q PL R D Q 中序遍历: Q—R—PL—D 删除后: Q—R—PL PL R Q PL R Q D 中序遍历:D—PR—R—Q 删除后: PR—R—Q PR R Q PR R D Q 中序遍历: Q—R—D—PR 删除后: Q—R—PR PR R Q PR 具体解释 删除叶结点和删除的结点只有左子树或者只有右子树这两种操作,可通过下面语句实现。 if (!p-rchild) { q=p;p=p-lchild;free(q);} else if (!p-lchild) { q=p;p=p-rchild;free(q);} 10 18 5 8 12 2 3 p 具体实现 方法一:首先将结点D的右子树链接到其中序前驱结点(结点D的左子树中“最右下”且右指针域为空的结点)的右指针域,然后把结点R(结点D的双亲结点)指向结点D的指针链接到结点D的左子树上即可。 R D Q RR DR C CL QL GL G p f R Q RR DR C CL QL GL G f 该二叉排序树的中序遍历结果为: CL →C→QL→Q→GL→G→D→DR →R →RR 删除的结点既有左子树又有右子树 方法二:把结点D 的中序前驱结点G的值赋给结点D,因为该中序前驱结点G只有左子树GL,然后将结点G的双亲结点的右指针链接到GL即可。 R D Q RR DR C CL QL GL G p f R G Q RR DR C CL QL GL p f 该二叉排序树的中序遍历结果为: CL →C→QL→Q→GL→G→D→DR →R →RR 删除的结点既有左子树又有右子树 删除的结点既有左子树又有右子树,可通过下面语句实现。 q=p;s=p-lchild; while (s-rchild) {q=s;s=s-rchild;} p-data=s-data; if (q!=p) q-rchild=s-lchild; else q-lchild=s-lchild; free(s); R D Q RR DR C CL QL GL G p f 具体实现 BST 上查找过程,是从根结点到所找到结点的一条路径。与给定值比较次数等于该路径长度+1,最大次数不超过树的深度。但含有n个结点的BST却不唯一。因此,含有n个结点的BST的ASL和树的形态有关。 最差情况是退化为单支树,ASL=(n+1)/2 (同顺序查找)。最好情况与折半查找相同,与log2n成正比。 12 45 24 53 12 37 93 (45, 24, 53, 12, 37, 93) 24 37 45 53 93 (12, 24, 37, 45, 53, 93) ASL(a)=(1+2+2+3+3+3)/6 =14/6 ASL(b)=(1+2+3+4+5+6)/6 =21/6 查找分析 平衡二叉树是二叉排序树的另一种形式,其特点为:树中每个结点的左、右子树高度之差的绝对值不大于1 。若平衡因子定义为结点左子树的高度减去右子树的高度,则平衡二叉树所有结点的平衡因子只可能是-1、0、1的二叉排序树。例如: 2 0 2 1 0 平衡树 非平衡树 -2 -2 0 -1 0 0 1 0 1 平衡二叉树 采取的方法是在向平衡二叉树插入结点时进行平衡化旋转。基本思想为:假定向平衡树插入一个结点后破坏了其平衡性,则首先要找出唯一一棵最小不平衡子树,然后再调整该子树中有关结点之间的链接关系,使之成为一棵新的平衡二叉树。最小不平衡子树被调整为平衡子树后,整个二叉排序树又成为一棵平衡树。 最小不平衡子树是指 离插入结点最近,且平衡 因子绝对值大于1的祖先 结点作为根的子树。 0 27 51 10 18 41 0 -1 1 0 1 27 51 10 18 41 0 -2 1 1 16 0 构造平衡二叉树的方法 (1)单向右旋平衡处理( LL型) : 新插入结点在A的左子树根结点的左子树上。A的平衡因子由1增至2,导致失衡。 调整规则:将结点A 的左孩子B向上旋转成为新二叉树的根,将结点A 及其右子树向右下旋转成为结点B的右子树,而结点B原来的右子树BR则成为结点A的左子树。(进行一次顺时针旋转) 调整方法分四种情况 h +1 h-1 A B AR BR BL h-1 0 +2 +1 h h-1 A B AR BR BL 0 0 具体实现: lc=p-lchild; p-lchild=lc-rchild; lc-rchild=p; p=lc; p (2)单向左旋平衡处理( RR型) : 新插入结点
文档评论(0)