二叉搜索树(Binary Search Tree,BST),要么是一颗空树,要么是一颗具有如下性质的二叉树:对于二叉搜索树的任意结点来说,若它的左子树非空,则左子树上所有结点的值均小于它的值; 若它的右子树不空,则右子树上所有结点的值均大于它的值; 它的左、右子树也分别为二叉搜索树。
定义一颗二叉搜索树的结点结构如下:
struct BST_Node
{
int val;
BST_Node *left;
BST_Node *right;
BST_Node(int x) : val(x), left(nullptr), right(nullptr){}
};
基于二叉搜索树的特点,其查找结点值的方式与普通二叉树不同。为了维护二叉搜索树的特点,其结点的插入、删除操作也比较特殊。
查找
二叉搜索树的查找比较简单,结合二叉搜索树左子树比根小,右子树比根大的特点,只需要将查找值与结点值作比较,判断下一步往左子树走还是右子树走就可以了。
BST_Node* searchBST(BST_Node *root, int val)
{
while (root != nullptr)
{
if (root->val < val)
{
root = root->right;
}
else if (root->val > val)
{
root = root->left;