主要介绍了二叉搜索树的遍历,查找,最小(大)结点的查找,前驱结点,后继结点,插入新结点,删除结点等操作的实现
基本介绍
满足如下特点的二叉树: 设x为二叉搜索树中的结点。如果y是x左子树中的一个结点,那么y.key <= x.key。如果y是x的右子树中的一个结点,那么y.key >= x.key
基本操作(伪代码,摘自算法导论第12章)
中序遍历
1  | INORDER-TREE-WALK(x)  | 
查找
1  | TREE-SEARCH(x, k)  | 
最小结点查询
1  | TREE-MINIMUM(x)  | 
最大结点查询
1  | TREE-MAXIMUM(x)  | 
后继结点
1  | TREE-SUCCESSOR  | 
前驱结点
1  | TREE-PREDECESSOR  | 
插入
1  | TREE-INSERT(T, z)  | 
删除
子过程
TRANSPLANT,用来用另一棵树替换一棵子树,并成为其双亲的孩子结点1
2
3
4
5
6
7
8TRANSPLANT(T,u,v)
if u.p == null
T.root = v
elseif u == u.p.left
u.p.left = v
else u.p.right = v
if v != null
v.p = u.p删除结点
z结点只存在左子树z结点只存在右子树z结点存在左右子树
3.1.z结点的后继结点y为z的直接右孩子
3.2.z结点的后继结点y不是z的直接右孩子

实现伪代码:
1  | TREE-DELETE(T, z)  | 
参考资料
- 算法导论第12章