算法导论12.1 Exercises 答案
12.1-1
对于键的集合\(\{1, 4, 5, 10, 16, 17, 21\}\),高度为\(2,3,4,5,6\)的树分别如图所示:
12.1-2
区别在于,二叉搜索树要求右子树所有的关键字都大于当前节点,而左子树的关键字都小于当前节点,这个定义是针对子树的;而最小堆仅要求两个子节点的关键字都大于当前节点,这个定义是针对子节点的。最小堆的两个子节点在定义上并没有先后的区别,因此如果要设计以\(O(n)\)的时间遍历最小堆按序打印关键字的算法,将会无法做出先遍历左子节点还是右子节点的选择。最终,这个算法无法设计出来。
12.1-3
1 | NONRECURSIVE-INORDER-TREE-WALK(x) |
12.1-4
1 | PREORDER-TREE-WALK(x) |
12.1-5
考虑使用反证法证明:如果通过任意一个序列构造一棵二叉搜索树的时间复杂度为\(o(n\lg n)\),那么通过中序遍历这棵二叉搜索树,可以以\(\Theta(n)\)的时间复杂度导出一个有序序列,整个过程的时间复杂度为\(o(n\lg n)+\Theta(n)=o(n\lg n)\),这和原题目条件中基于比较排序的运行时间为\(\Omega(n\lg n)\)矛盾。因此构造任意一个序列的二叉搜索树的时间复杂度为\(\Omega(n\lg n)\)。