[算法导论 12章练习答案] 12.2 12.3
2012-11-29 10:38
218 查看
12.3
12.3
12.3
//12.3-1 TREE-INSERT(T,z) if root[T]=NIL root[t]=z return; x=root[T] if key(z)<key[x] TREE-INSERT(left[T],z) // here left[T] is a pointer to a tree, for we may modify the content of the tree else TREE-INSERT(right[T],z) //12.3-2 // 论证:为在树中查找一个key,所检查的节点数等于插入该key时所检查的结点数+1 // 论证过程:假设插入该key时检查的结点路径是n0n1n2...nk,则查找该key时的路径也一定是n0n1...nk,不可能有第二条路径。 // 再加上该key结点,因此总共要检查k+1个节点数 //12.3-3 /* 最好情况是:nlgn 最坏情况: n2 */ //12.3-4 另外有一种数据结构包含指向BST某结点y的指针。用过程tree-delete删除y的前趋z,这样做会出现什么问题.如何改写tree-delete来解决这些问题 /* 会出现问题:y的指针失效 改写方法:tree-delete中,除了被删除结点的指针,其他结点的指针不变 */ // original version TREE-DELETE(T,z) if(left[z]=NIL or right[z]=NIL) y=z else y=TREE-SUCCESSOR(z) // y is the node to be delete. and y should have at most one child. Can we use TREE-PREDECESSOR? if left[y]!=NIL x=left[y] else x=right[y] if x!=NIL p[x]=p[y] if p[y]==NIL // the tree is empty root[T]=x else if y=left[p[y]] left[p[y]]=x else right[p[y]]=x if y!=z key[z]=key[y] // and copy the satellite data from y to z return y // modified version TREE-DELETE(T,z) if(left[z]=NIL or right[z]=NIL) y=z else y=TREE-SUCCESSOR(z) // y is the node to be delete. and y should have at most one child. Can we use TREE-PREDECESSOR? if left[y]!=NIL x=left[y] else x=right[y] if x!=NIL p[x]=p[y] // 已经删除了要删除的结点 if p[y]==NIL // the tree is empty root[T]=x else if y=left[p[y]] left[p[y]]=x else right[p[y]]=x if y!=z left[y]=left[z] right[y]=right[z] if z=left[p[z]] left[p[z]]=y else right[p[z]]=y return y //12.3-6 //修改策略:如何选择前趋或后继结点作为被拼接的结点,使得有更好的经验性能 //假设被删除的结点是z,有两个子节点。其前趋是p,后继是s。则一定有h(z)<h(p),h(z)<h(s) // 从p、s中选择高度较大的结点作为被拼接的结点。这样可减少z的两棵子树的高度差,使得树更加平衡
相关文章推荐
- 二叉查找树相关算法实现(算法导论12章)
- [算法导论]练习2-4.d求排列中逆序对的数量
- 算法(第四版 Robert Sedgewick)课后练习答案 1.1 基础编程模型
- 算法导论第二版2.2-2 答案
- 寻找逆序对的算法,要求运行时间为O(nlgn),算法导论答案
- 算法导论第十二章习题12.3-1---二叉树插入的递归版本
- 算法导论12.2-8 从任意结点使用后继函数k次的时间复杂度为O(k+h)
- 算法导论第二版 习题2.1-4答案
- 算法导论 练习 2.2
- 算法导论第二版习题试解-第二章练习2.2
- [算法导论 12章] 二叉查找树
- 算法导论期末考试英文练习题带答案!!!
- 算法导论22.2广度优先搜索 练习总结
- 10.2-5 用环形单链表来实现字典操作INSERT、DELETE和SEARCH,并给出它们的运行时间 算法导论答案
- [算法导论]2.2节编程练习C++实现
- [算法导论]练习16.1-4 活动教室分配(区间着色问题)
- 算法导论第六章习题答案(第三版) Introduction to Algorithm
- 算法导论10.2-6答案
- [算法导论]练习4.1-5最大连续子数组问题
- 算法导论10.2-7答案