二叉搜索树(BST),也称二叉查找树、二叉排序树。
一棵二叉树,可以为空;如果不为空,满足以下性质:
- 非空左子树所有键值小于其根结点的键值
- 非空右子树所有键值大于其根结点的键值
- 左、右子树都是二叉搜索树
二叉搜索树操作的特别函数
- Position Find(ElementType X, BinTree BST):查找元素X,返回所在结点地址
- Position FindMin(BinTree BST):查找并返回最小元素所在结点地址
- Position FindMax(BinTree BST):查找并返回最大元素所在结点地址
- BinTree Insert(ElementType X, BinTree BST)
- BinTree Delete(ElementType X, BInTree BST)
Find
在程序返回时进行递归,叫做尾递归,从编译的角度可以用循环实现。
改为迭代函数后:
FindMax 和 FindMin
- 最大元素一定在树的最右分枝的端结点上
- 最小元素一定在树的最左分枝的端结点上
Delete
考虑三种情况:
- 要删除的是叶结点:直接删除,并再修改其父结点指针置为NULL
- 要删除的结点只有一个孩子结点:将其父结点的指针指向要删除的结点的孩子结点
- 要删除的结点有左右两棵子树:用另一结点替代被删除的结点:右子树的最小元素或者左子树的最大元素
右子树的最小元素、左子树的最大元素一定不是有两个结点