Binary Search Tree

二叉搜索树(BST),也称二叉查找树、二叉排序树。
一棵二叉树,可以为空;如果不为空,满足以下性质:
  1. 非空左子树所有键值小于其根结点的键值
  1. 非空右子树所有键值大于其根结点的键值
  1. 左、右子树都是二叉搜索树

二叉搜索树操作的特别函数

  • 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

notion image
在程序返回时进行递归,叫做尾递归,从编译的角度可以用循环实现。
改为迭代函数后:
notion image

FindMax 和 FindMin

  • 最大元素一定在树的最右分枝的端结点上
  • 最小元素一定在树的最左分枝的端结点上
notion image

Delete

考虑三种情况:
  • 要删除的是叶结点:直接删除,并再修改其父结点指针置为NULL
  • 要删除的结点只有一个孩子结点:将其父结点的指针指向要删除的结点的孩子结点
  • 要删除的结点有左右两棵子树:用另一结点替代被删除的结点:右子树的最小元素或者左子树的最大元素
右子树的最小元素、左子树的最大元素一定不是有两个结点
notion image