二叉查找树
定义
- 二叉查找树:一颗二叉树,可以为空,若不为空,满足以下性质:
- 非空左子树的所有键值小于其根节点的键值;
- 非空右子树的所有键值大于其根节点的键值;
- 左右子树都是二叉查找树。
操作
position ItemFind(ElemType x, BinTree BST)
{
while(BST)
{
if(x > BST -> data)
BST = BST -> right;
else if(x < BST -> data)
BST = BST -> left;
else
return BST;
}
return NULL;
}
BinTree Insert(ElemType x, BinTree BST)
{
if(! BST)
{
BST = malloc(sizeof(struxt TreeNode));
BST -> data = x;
BST -> left = BST -> right = NULL;
}
else if(x < BST -> data)
BST -> left = Insert(x, BST -> left);
else if(x > BST -> data)
BST -> right = Insert(x, BST -> right);
else
return BST; // x已经存在了,什么都不做
}
BinTree Delete(Elemtype x, BinTree BST)
{
Position tmp;
if(! BST)
printf("There is no such an item!\n");
else if(x < BST -> data)
BST -> left = Delete(x, BST -> left);
else if(x > BST -> data)
BST -> right = Delete(x, BST -> right);
else
if(BST -> left && BST -> right)
{
tmp = FindMin(BST -> right);
BST -> data = tmp -> data;
BST -> right = Delet(BST -> data, BST -> right);
}
else
{
tmp = BST;
if(! BST -> left)
BST = BST -> left;
else if(! BST -> right)
BST = BST -> right;
free(tmp);
}
return BST;
}