主要介绍了二叉搜索树的遍历,查找,最小(大)结点的查找,前驱结点,后继结点,插入新结点,删除结点等操作的实现
基本介绍
满足如下特点的二叉树: 设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章