- 2
- 0
- 约 8页
- 2016-10-09 发布于江西
- 举报
《算法导论》CLRS算法C++实现(十)P151 二叉查找树.doc.doc
第十二章 二叉查找树
前几章比较简单,都是数据结构里的简单内容,以前也都写过,这次就不浪费时间在这些上面了。直接写二叉查找树、红黑树。
在二叉查找树上执行的基本操作的时间与树的高度成正比。对一棵含n个结点的完全二叉树,这些操作的最坏情况运行时间为O(lgn)。但是如果二叉查找树是含n个结点的线性链,则这些操作的最坏情况运行时间为O(n)。
二叉查找树的基本操作有:遍历,查找,求最大值,求最小值,求直接前驱,求直接后继,插入,删除等。
1、遍历
根据二叉查找树的性质,可以用一个递归算法按排列顺序输出树中的所有关键字。这种算法称为中序遍历算法。因为对任一子树根的关键字在输出时介于左子树和右子树的关键字之间。
INORDER-TREE-WALK(x)
1 if x ≠ NIL
2 then INORDER-TREE-WALK(left[x])
3 print key[x]
4 INORDER-TREE-WALK(right[x])
?2、查找(搜索)
给定指向树根的指针和关键字k,算法返回指向包含关键字k的结点的指针,如果不存在,返回NIL。算法过程从树的根结点开始进行查找,并沿着树下降,对碰到的每个结点x, 就比较k和key[x],如果相同,则搜索结束,如果k小于key[x],则继续查找x的左子树,如果k大于key[x],则继续在x的右子树中查找。算法如下:
I
原创力文档

文档评论(0)