- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
树的查找和树的应用 上海金融学院信息管理系 第六章 树的查找和树的应用 6.1 查找树 6.2 满树、拟满树和丰满树 6.3 堆和堆排序 6.1 查找树 前面介绍:顺序查找、二分查找、分块查找、HASH查找。 二分查找法,操作速度快,但要求结点序列顺序存储(存放在数组中)。 结点序列存放在数组中,插入和删除需要移动大量结点,很不方便。 这里介绍既可用二分查找,又使用方便插入和删除的链接存储的方法——查找树。 6.1 查找树 1. 查找树的定义 查找树T是一棵二叉树,要么为空,要么满足下面三个条件: (1)如果树T的根结点的左子树非空,那么左子树中的所有结点的键值都小于T的根结点的键值; (2)如果树T的根结点的右子树非空,那么右子树中的所有结点的键值都大于T的根结点的键值; (3)它的左、右子树都是查找树。 6.1 查找树 2. 性质 二叉树T为查找树的充分必要条件是,按中序遍历二叉树T的结点可得到已排好序的结点序列。 p. 146 图6.1.1 画出4棵查找树 6.1 查找树 3. 二叉查找算法 在给定的查找树t中找出具有给定键值a的结点的算法。 (1)如果t为空,那么查找失败,算法结束;否则,进入(2); (2)如果t-data等于a,那么查找成功,算法结束;否则,进入(3); (3)如果a小于t-data,那么t=t-lchild;否则,t=t-rchild。转到(1)。 p. 147 search(t, a, p_p, p_q) 3. 二叉查找算法 分析算法search(t, a, p_p, p_q) *p_q 是指针,指向当前结点 *p_p 是指针,指向当前结点的父结点 算法执行到结束,若*p_q不空,则*p_q所指的结点就是a结点(找到了),而*p_p指向它的父结点。假若*p_p为空,则a结点就是根结点。 假若*p_q为空,则表示找不到a结点。这时考察*p_p,若为空,则查找树t为空树;否则,*p_p指向查找路径的最后一个结点。 记住以上分析,有利于解决以后问题。 6.1 查找树 4. 在查找树中插入结点的算法 在给定的查找树t中插入一个键值为a 的结点,首先调用函数search( ),查找结点a。如果它在树t中,则不做插入,返回1;否则把它插到查找树t的合适位置上,返回0。 pp. insert(p_t, a) 6.1 查找树 5. 在查找树中删除结点的算法 要求: 找到要删除的结点,将它删去,但操作以后的二叉树仍是一棵查找树。 原则: 若被删结点有左子树,那么被删结点的位置由它的左子树的根结点来充当,它的右子树被链接在左子树的最右下方;否则,被删结点的位置由它的右子树的根结点来充当。 5. 在查找树中删除结点的算法 分六种情况分析: (1)若被删的是根,而且 ①它没有左子结点 ②它有左子结点 (2)若被删结点非根,且没有左子结点 ③被删结点是父结点的左子结点 ④被删结点是父结点的右子结点 (3)若被删结点非根,且有左子结点 ⑤被删结点是父结点的左子结点 ⑥被删结点是父结点的右子结点 5. 在查找树中删除结点的算法 pp. 149-150 delete(p_t, a) 删除成功,则返回0;否则,返回1。 以上算法不是唯一的。也有其他算法,只要保持被删除结点后仍然是查找树就行。 6.2 满树、拟满树和丰满树 要使查找时间小,则应使从根到其他结点的树枝尽量地短。也就是说,各结点应安排在尽量靠近根的位置。 1. 满树、拟满树和丰满树的定义 设二叉树T有n个结点,令i=[log2(n+1)],r=n-(2i-1)。如果其中(2i-1)个结点放满第0至第(i-1)层。 (1)若r=0,则称树T是一棵满二叉树,简称满树。 (2)若r0,且剩下的r个结点靠左开始排列在第i层上,则称树T是一棵拟满二叉树,简称拟满树。 (3)若r0,且剩下的r个结点随意地分布在第i层上,则称树T是一棵丰满二叉树,简称丰满树。(p. 152 图6.2.1) 2.满查找树、拟满查找树和丰满查找树 若树T是一棵满树,同时又是查找树,则称树T是一棵满查找树。 若树T是一棵拟满树,同时又是查找树,则称树T是一棵拟满查找树。 若树T是一棵丰满树,同时又是查找树,则称树T是一棵丰满查找树。 性质: 满查找树 = 拟满查找树 = 丰满查找树 3. 构造丰满树 设有n个结点的任意序列,可用平分法构造
文档评论(0)