一:定义
二叉搜索树(Binary search tree):二叉树,可能为空,每个元素有一个关键字且关键字唯一,左子树关键字小于根节点关键字,根节点关键字小于右子树关键字
有重复值的二叉搜索树(Binary search tree with duplicates):关键字不唯一的二叉搜索树
索引二叉搜索树(indexed binary search tree):二叉搜索树的每个节点添加一个leftSize域,值为左子树元素个数,该值也是索引值
二:二叉搜索树的操作
查找:要查找关键字为thekey的节点。从根开始查找,如果key比根的关键字小,则在左子树中找,否则在右子树中找,子树中方法类似
插入:要插入新节点thePair。首先通过查找操作看树中是否已经存在某个节点的关键字与新节点的关键字相同,如果存在,则用新节点的元素值替换查找到节点的元素值;如果不存在,那么就将新节点作为查找中断节点的孩子插入二叉搜索树。
删除:删除节点p。考虑三种情况:
1.p是叶节点:释放该节点空间
2.p只有一棵子树:如果p是根节点,则p唯一子树的根节点成为新的根节点;如果p有父节点,则让p的父节点指向p的子树,然后释放p
3.p有两棵子树:先将该节点的元素替换为它的左子树的最大元素或者右子树的最小元素,然后把替换元素的节点删除。要找到一个节点的左子树中关键字最大的节点,先移动到左子树的根,然后沿着右孩子指针移动,直到右孩子指针为空为止,找到右子树中关键字最小的节点则是沿着左孩子指针移动。先替换,替换之后的左子树最大节点处就成了一个叶节点或者仅仅有单子树的节点,再按照第二种情况的方法删除。
二叉搜索树的高度:随机插入的平均高度是O(logn)