算法导论第十二章总结以及课后题答案
二叉搜索树
总结
1.查找二叉搜索树中最大关键字元素
TREE-MAXIMUM(x)while x.right!=NILx=x.rightreturn x
2.查找二叉搜索树中最小关键字元素
TREE-MINIMUM(x)while x.left!=NILx=x.leftreturn x
3.插入一个结点到二叉树
TREE-INSERT(T,z)y=NIL //y结点的作用是保存找到的z的双亲结点x=T.root //从根结点开始向下寻找while x!=NILy=xif z.key<x.keyx=x.leftelsex=x.rightz.p=yif y==NIL //向空树中插入一个结点z的情况T.root=zelse if z.key<y.key //虽然找到了z的双亲结点y,但是不知道z是y的左孩子还是右孩子,还需做出判断y.left=zelsey.right=z
4.二叉搜索树后继结点的查找
TREE-SUCCESSOR(x)if x.right!=NIL //如果结点x的右子树不为空,那么x的后继就是x右子树中的最左结点return TREE-MINIMUM(X.right)else //如果x的右子树为空,为了找到后继结点y,需要从x开始沿树而上遇到这样一个结点:这个结点是它双亲的左孩子y=x.pwhile y!=NIL and x==y.rightx=yy=y.preturn y
5.删除二叉搜索树中的一个结点
TRANSPLANT(T,u,v)if u.p==NIL //u是树根,则替换后v就是树根T.root=velse if u=u.p.leftu.p.left=v //如果u是双亲的左孩子,则v代替u成为u双亲的左孩子elseu.p.right=v //如果u是双亲的右孩子,则v代替u成为u双亲的右孩子if v!=NIL //v其实可以为空v.p=u.p
注意:上述TRANSPLANT没有处理v.left和v.right的更新,这也就是说,用子树v替换完u之后,v.left和v.right的更新要由TRANSPLANT的调用者负责。
TREE-DELETE(T,z)if z.left==NIL //结点z没有左孩子,则直接用结点z的右孩子这棵子树对z这棵子树进行替换TRANSPLANT(T,z,z.right)else if z.right==NIL //结点z没有左孩子,则直接用结点z的右孩子这棵子树对z这棵子树进行替换TRANSPLANT(T,z,z.left)else y=TREE-MINIMUM(z.right) //结点的左右孩子均存在,通过调用TREE-MINIMUM(查找比给定结点大的最小结点也就是后继结点)查找结点z的后继y,用它来替代z if y.p!=z //如果找到的y不是z的孩子结点,则y结点必然没有左孩子(否则y就不是z的后继结点)。TRANSPLANT(T,y,y.right) //先用y的右孩子这棵子树替代y子树y.right=z.right //此时,将z的右孩子赋予y的右孩子y.right.p=y TRANSPLANT(T,z,y) //如果找到的y是z的孩子结点,则子树y对子树z进行替换。否则,用更新后的子树y对子树z进行替换y.left=z.left //y的孩子的更新y.left.p=y
课后题答案
12.1-2 二叉搜索树性质与最小堆性质之间有什么不同?
1.二叉排序树是为了实现动态查找而设计的数据结构,它是面向查找操作的,在二叉排序树中查找一个结点的平均时间复杂度是O(log n);
堆是为了实现排序而设计的一种数据结构,它不是面向查找操作的,因而在堆中查找一个结点需要进行遍历,其平均时间复杂度是O(n)。
2.在二叉排序树中,某结点的右孩子结点的值一定大于该结点的左孩子结点的值;
在堆中却不一定,堆只是限定了某结点的值大于(或小于)其左右孩子结点的值,但没有限定左右孩子结点之间的大小关系。
具有n个结点的堆,其深度为lgn 。
12.1-3 设计一个执行中序遍历的非递归算法。
INORDER-TREE-WALK(x)node=rootwhile node!=NIL || !stack.empty()if node!=NILpush(node)node=node.left //从根结点开始,先将左孩子入栈else node=top() //左孩子为空时,对栈顶元素进行出栈visit(node) //读取node的关键字node=node.right //转到出栈元素的右孩子
12.2-3 写出过程TREE-PREDECESSOR的伪代码。
TREE-PREDECESSOR(x)if x.left!=NIL //如果结点x的左子树不为空,那么x的后继就是x左子树中的最右结点return TREE-MAXIMUM(x.left)else //如果x的左子树为空,为了找到前驱结点y,需要从x开始沿树而上遇到这样一个结点:这个结点是它双亲的右孩子y=x.pwhile y!=NIL and x==y.leftx=yy=y.preturn y
12.3-1 给出TREE-INSERT过程的一个递归版本。
RECURSIVE-INSERT(x,z) //以x结点为树根的树中插入结点zif z.key<x.key and x.left!=NILRECURSIVE-INSERT(x.left,z)if z.key>x.key and x.right!=NILRECURSIVE-INSERT(x.right,z)z.parent=xif z.key<x.keyx.left=zelsex.right=z
算法导论第十二章总结以及课后题答案相关推荐
- 算法导论第十二章:二叉查找树
查找树是一种数据结构,它支持多种动态集合操作,包括search, minimum, maximum, predecessor, successor, insert以及delete.他既可以用作字典,也 ...
- C语言谭浩强第三版第十二章例题及课后题:位运算
eg12.1取一个整数a从右端开始的4~7位 0000...000000 0 1111...111111 ~0 1111...110000 ~0<< ...
- 【Java数据结构与算法】第十二章 哈夫曼树和哈夫曼编码
第十二章 哈夫曼树和哈夫曼编码 文章目录 第十二章 哈夫曼树和哈夫曼编码 一.哈夫曼树 1.基本术语 2.构建思路 3.代码实现 三.哈夫曼编码 1.引入 2.介绍 3.代码实现哈夫曼编码综合案例 一 ...
- 算法导论第十五章:动态规划(一)
前言:最近一直在刷leetcode,虽然经常遇到动态规划的问题,但是常常还是留下没有知识的泪水 练习解答链接:https://ita.skanev.com/
- July博客第十二章参考学习
### July博客第十二章参考学习 ## 第一题:给40亿个不重复的unsigned int 的整数,无序,给一个随机数,快速判断这个是否在40亿个数当中 1. 个人思路: - bitmap,重点在 ...
- 统计学怎么求加权指数_暨南大学《统计学》中文习题 第十二章 统计指数
第十二章 统计指数 (一)判断题 1. 狭义指数是指反映社会经济现象变动与差异程度的相对数.( ) 是: 否: 2. 广义上说,任何两个不同时间的同类指标的对比都可称为指数.( ) 是: 否: 3. ...
- 数字图像处理:第十二章 小波变换
第十二章 小波变换 目录 1 引言 2 连续小波变换 3 二进小波变换 3.1 Haar变换 4 离散小波变换 4.1 ...
- 程序员编程艺术第一 二十二章集锦与总结(教你如何编程)
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 程序员编 ...
- 程序员编程艺术第一~二十二章集锦与总结(教你如何编程)
程序员编程艺术第一~二十二章集锦与总结(教你如何编程) 作者:July.编程艺术室. 出处:http://blog.csdn.net/v_JULY_v . 题记 好久没更新博客了,虽只有一个月,但对我 ...
最新文章
- 使用Qt编写模块化插件式应用程序
- 注册HttpSessionListener失效原因
- 【C++】源自指针的报错
- 米的建站日记(2014年12月18日)
- 中国功率半导体产业销售规模与投资策略研究报告2022版
- linux fedora35让GRUB 2记住上一次启动的操作系统
- linux测试游戏下载,一波超人内测版最新下载-一波超人内测版游戏下载v1.0.2-Linux公社...
- 一文学习python 所有基础知识_Python学习基础知识概要
- java贪吃蛇客户端服务器_java Socket套接字TCP编程开发服务端和客户端之间的通信 - 贪吃蛇学院-专业IT技术平台...
- django模板的使用方法
- 贝叶斯分类与贝叶斯网络
- 为什么电脑屏幕会横过来_笔记本电脑屏幕横过来了怎么办?笔记本电脑屏幕倒过来了恢复方法...
- 手摸手教你阅读和调试大型开源项目 ZooKeeper
- 数字图像处理 关于matlab的图像处理操作
- sklearn.metrics.confusion_matrix
- 「SQL面试题库」 No_55 销售分析 I
- CC-Proxy配置网络代理服务器
- 激发波长近红外二区发光量子点,近红外二区(NIR-II)发射波长(1000-1700 nm)
- windows上删除不了文件
- Java提取图片文字 tess4j
热门文章
- 与你的梦,种植于青山绿水间
- dblink导致存储过程报异常ORA-03113:通信通道文件尾 ORA-02063紧接着line(xxxdblink名称) ORA-06512在(xxxx)line 24
- 基于SSM实现医院预约挂号系统
- 已知华氏温度f c语言,编程题:已知两种温度的换算公式C=(5/9)(F-32),试编写一个程序输入华氏度F,输出摄氏度。...
- App中快速复用微信登录授权的一种方法
- 自己写一个strcmp函数(C++)
- 求三角形外接圆 hdu4720
- 洛谷B2006 地球人口承载力估计
- SAP 采购合同案例教程金额合同前台
- 有了这个抠图滤镜,设计师再也不怕扣头发婚纱了!