初始BST
二叉搜索树(Binary Search Tree,BST)又称二叉排序树,其定义为要么是空树,要么是满足二叉搜索树性质的二叉树。
二叉搜索树性质(BST性质)如下:
- 若根结点的左子树非空,则左子树的所有结点关键字均小于根结点关键字。
- 若根结点的右子树非空,则右子树的所有结点关键字均大于根结点关键字。
- 根结点的左右子树本身又各是一棵二叉搜索树。
注:在实际应用中,可能出现关键字相同的情况,可以修改(1)中为小于等于,或(2)中为大于等于,甚至修改为左大右小。
二叉排序树得名于它的一个重要性质:按中序遍历该树所得到的中序序列是一个递增有序序列。
BST的插入和创建
插入的基本思路:
若二叉搜索树bst为空,则创建一个key域为k的结点作为根结点;否则比较k和根结点的关键字,若相等则已有关键字,不再插入或做更新操作;若k小于根结点关键字,插入根结点的左子树;否则插入右子树。
BST的查找
查找的基本思路:
与二分查找类似,逐步缩小查找范围,采用递归查找算法。
BST的删除
删除的基本思路:
删除操作首先要进行查找,假设查找结束时p指向要删除的结点,分为以下几种情况
- p指向叶子结点,直接删除。
- p指向只有左(右)子树没有右(左)子树的结点,可以直接将左(右)子树替代p指向的结点。
- p结点同时有左右子树,可以从其左子树中选择关键值最大的结点minmax,用minmax的值替代p的值,并删除minmax结点;或从其右子树中选择关键值最小的结点maxmin,用maxmin的值替换p的值,并删除maxmin结点。