算法导论12.2查询二叉搜索树 练习总结
来源:互联网 发布:淘宝店怎么改名字 编辑:程序博客网 时间:2024/05/22 17:45
12.2-1 假设一棵二叉搜索树中的结点在 1 到 1000 之间,现在想要查找数值为 363 的结点。下面序列中哪个不是查找过的序列?
a. 2, 252, 401, 398,330,344,397,363。
b. 924,220,911,244,898,258,362,363。
c. 925,202,911,240,912,245,363。
d. 2,399,387,219,266,382,381,278,363。
e. 935,278,347,621,299,392,358,363。
ANSWER:
c:240 < 911,即 240 是 911 的左子树,则 240 后的数需小于 911,而 912 > 911,矛盾。
e:621 > 347,即 621 是 347 的右子树,则 621 后的数需大于 347,而 299 < 347,矛盾。
12.2-2 写出 TREE-MINIMUM 和 TREE-MAXIMUM 的递归版本。
ANSWER:
<span style="font-size:18px;">TREE_MINIMUM(root){ if (root->left == NULL) return root; else return TREE_MAXIMUM(root->right);}</span>
<span style="font-size:18px;">TREE_MAXIMUM(root){ if (root->right == NULL) return root; else return TREE_MAXIMUM(root->right);}</span>
12.2-3 写出过程 TREE-PREDECESSOR 的伪代码。
ANSWER:
<span style="font-size:18px;">伪代码:TREE-PREDECESSOR(x) if x.left ≠ NIL return TREE-MAXIMUM(x.left) y = x.p while y ≠ NIL and x == y.left: x = y y = x.p reutrn y</span>
12.2-4 Bunyan 教授认为他发现了一个二叉搜索树的重要性质。假设在一棵二叉搜索树中査找一个关键字 k,查找结束于一个树叶。考虑三个集合:A 为査找路径左边的关键字集合;B 为査找路径上的关键字集合;C 为査找路径右边的关键字集合。Bunyan 教授声称:任何 a ∈ A,b ∈ B 和 c ∈ C,一定满足 a ≤ b ≤ c。请给出该教授这个论断的一个最小可能的反例。
ANSWER:
12.2-5 证明:如果一棵二叉搜索树中的一个结点有两个孩子,那么它的后继没有左孩子,它的前驱没有右孩子。
ANSWER:根据 TREE-SUCCESSOR ( TREE-PREDECESSOR ),如果结点 x 有右(左)儿子,则返回右(左)儿子的 TREE-MINIMUM ( TREE-MAXIMUM ),所以后继(前驱)没有左(右)儿子。
12.2-6 考虑一棵二叉搜索树 T,其关键字互不相同。证明:如果 T 中一个结点 x 的右子树为空,且 x 有一个后继 y,那么 y 一定是 x 的最底层祖先,并且其左孩子也是 x 的祖先。(注意到,每个结点都是它自己的祖先。)
ANSWER:当结点 x 的右儿子为空时,执行的循环算法就是题意。
12.2-7 对于一棵有 n 个结点的二叉搜索树,有另一种方法来实现中序遍历,先调用 TREE-MINIMUM 找到这棵树中的最小元素,然后再调用 n-1 次的TREE-SUCCESSOR。证明:该算法的运行时间为 Θ(n)。
ANSWER:每条边遍历了两次。所以时间为Θ(n)。
12.2-8 证明:在一棵高度为 h 的二叉搜索树中,不论从哪个结点开始,k 次连续的 TREE-SUCCESSOR 调用所需时间为 O( k+h )。
ANSWER:假设开始的结点为V,结束的结点为T。
① 若 V 和 T 在同一条路径上,即 V 是 T 的祖先或者 T 是 V 的祖先,则和 12.2-7 一样,所示时间为 O( k )。
② 若 V 和 T 不在同一路径上;则令 W 是 V 和 T 的最小公共祖先,则从 V 到 T 过程必经过 W。从 V 到 W 和 W 到 T 的过程的时间必不大于 2h+2h ,即 O( h )。另外的在 V 到 W 和 W 到 T 经过的分支的时间复杂度之和为 O( k )。
所以总时间复杂度为 O( h+k )。
12.2-9 设 T 是一棵二叉搜索树,其关键字互不相同;设 x 是一个叶结点,y 为其父结点。证明:y.key 或者是 T 树中大于 x.key 的最小关键字,或者是 T 树中小于 x.key 的最大关键字。
ANSWER:由于 x 是叶结点,所以 x 没有儿子;
若 x 是 y 的左儿子,则 y 是 x 的后继(即y.key 是 T 树中大于 x.key 的最小关键字);
若 x 是 y 的右儿子,则 y 是 x 的前驱(即y.key 是 T 树中小于 x.key 的最大关键字)。
- 算法导论12.2查询二叉搜索树 练习总结
- 算法导论12.1什么是二叉搜索树 练习总结
- 算法导论12.4随机构建二叉搜索树 练习总结
- 算法导论程序28--查询二叉搜索树(Python)
- 算法导论-----二叉搜索树
- 算法导论-----------二叉搜索树
- 算法导论 二叉搜索树
- 算法导论--二叉搜索树
- 【算法导论】二叉搜索树
- 算法导论二叉搜索树
- 算法导论 二叉搜索树
- 算法导论二叉搜索树
- 算法导论 二叉搜索树
- 算法导论12章二叉搜索树 思考题总结
- 算法导论-第12章-二叉搜索树-12.2-1
- [算法导论]第十二章《二叉搜索树》
- 【算法导论】最优二叉搜索树
- 二叉搜索树(算法导论)
- 网络编程_post_同步_获取网络数据
- HttpClient Demo
- java可视化编程-eclipse安装windowbuilder插件
- break,continue和return
- 安装android驱动解决device not found
- 算法导论12.2查询二叉搜索树 练习总结
- 网络编程_post_异步-代理_获取网络数据
- 采样频率Hz 采样率KSPS或MSPS,两种单位的换算关系
- Android常用组件——定制化的SwipeListView
- ajax不能跳转页面,需要传递Message来决定结果
- linux定时任务的设置
- 第二十二篇:UITableView练习代码
- 网络编程_post_异步-请求_获取网络数据
- No2地图 MapKit框架