二叉搜索树:一颗二叉树可以为空,如果不为空则满足 1.非空左子树的所有键值小于根节点的键值2.非空右子树的所有键值大于根节点的键值 3.左右子树都是二叉搜索树。
二叉搜索树的递归查找
Position Find(ElementType X,BinTree &bst)
{
if(!bst) //如果树为空则返回空,查找失败
{
return NULL;
}
if(X>bst->Data)
{
return Find(X,bst->right); //再右子树中继续查找
}
else if(X<bst->Data)
{
return Find(X,bst->left); //再左子树中继续查找
}
else //X==bst->Data
{
return bst;
}
}
由于非递归函数的执行效率高,也可以将其改成迭代函数。(效率取决于树的高度)
Position IterFind(ElementType X,BinTree &bst)
{
while(bst)
{
if(bst->Data<X)
{
bst=bst->right;
}
else if(bst->Data>X)
{
bst=bst->left;
}
else
{
return bst;
}
}
return NULL; //查找失败
}
对于二叉搜索树来说,最小值一定在最左分支的端节点上,最大值一定在最右分支的端节点上
所以对于