算法导论12.3插入和删除 练习总结
来源:互联网 发布:linux 查看cpu日志 编辑:程序博客网 时间:2024/05/24 01:40
12.3-1 给出 TREE-INSERT 过程的一个递归版本。
ANSWER:
伪代码:TREE-INSERT(root, z) if root.key < z.key if root.right == NIL root.right = z z.p = root else TREE-INSERT(root.right, z) else if root.key > z.key if root.left == NIL root.left == z z.p = root else TREE-INSERT(root.left, z)
12.3-2 假设通过反复向一棵树中插入互不相同的关键字来构造一棵二叉搜索树。证明:在这棵树中查找关键字所检查过的结点数目等于先前插入这个关键字所检查的结点数目加 1。
ANSWER:因为搜索的路径和插入的路径是相同的,多检查一次结点的值和该关键字是否相等。
12.3-3 对于给定的 n 个数的集合,可以通过先构造包含这些数据的一棵二叉搜索树(反复使用 TREE-INSERT 逐个插入这些数),然后按中序遍历输出这些数的方法,来对它们排序。这个排序算法的最坏情况运行时间和最好情况运行时间各是多少?
ANSWER:
最坏情况是构成链表,时间为 O(n^2)。
最好情况是满二叉树,时间为 O(nlgn)。
12.3-4 删除操作可交换吗?可交换的含义是,先删除 x 再删除 y 留下的结果树与先删除 y 再删除 x 留下的结果树完全一样。如果是,说明为什么?否则,给出一个反例。
ANSWER:
12.3-6 当 TREE-INSERT 中的结点 z 有两个孩子时,应该选择结点 y 作为它的前驱,而不是作为它的后继。如果这样做,对 TREE-DELETE 应该做些什么必要的修改?一些人提出了一个公平策略,为前驱和后继富裕相等的优先级, 这样得到了较好的实验性能。如何对 TREE-DELETE 进行修改来实现这样一种公平策略?
ANSWER:
伪代码:TREE-DELETE(T, z) if z.left == NIL TRANSPLANT(T, z, z.right) else if z.right == NIL TRANSPLANT(T, z, z.left) else y = TREE-MAXIMUM(z.left) if y.p ≠ z TRANSPLANT(T, y, y.left) y.left = z.left y.left.p = y TRANSPLANT(T, z, y) y.right = z.right y.right.p = y通过检测被删除结点左右儿子的高度,来选择前驱还是后继。
1 1
- 算法导论12.3插入和删除 练习总结
- 算法导论13.3插入 练习总结
- 算法导论13.4删除 练习总结
- 《算法导论》笔记 第12章 12.3 插入和删除
- 算法导论习题练习——红黑树的插入和删除
- 【算法导论】二叉搜索树的插入和删除
- 学习算法导论——红黑树旋转插入和删除
- 算法导论11.2散列表 练习总结
- 算法导论13.2旋转 练习总结
- 算法导论14.3区间树 练习总结
- 算法导论22.4拓扑排序 练习总结
- 算法导论15.1钢条切割 练习总结
- 学习《算法导论》第一章 插入排序 总结
- 算法导论程序29--二叉搜索树的插入和删除(Python)
- 算法导论:插入排序和归并排序
- 算法导论-B树的插入与删除
- 算法导论 练习 2.1
- 算法导论 练习 2.2
- Java的字符串分割的不同实现
- 引用和应用对象的区别
- zhendeshizaikanbudong
- js的压缩
- DLX重复覆盖 hdu5046 Airport
- 算法导论12.3插入和删除 练习总结
- 7_4:verify arg
- php常用验证函数
- MySQL运算符和函数
- 《Effective STL》条款1-条款2
- GitHub上README.md教程
- Defining BJT Noise Equations
- 警告框和操作表(ActionSheet)
- sap用户出口 badi查询程序(通过事务代码)