**
数据结构-二叉搜索树的查找
**
二叉搜索树(BST)的查找主要分为:
1.查找某一个元素的Find函数
2.查找最小值的FindMin函数
3.查找最大值的FindMax函数
实现方法有:
1.递归(效率较低)
2.迭代(效率较高)
/* 递归查找某一元素 */
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 ( X > BST->Data )
BST = BST->Right; /* 向右子树中移动,继续查找 */
else if ( X < BST->Data )
BST = BST->Left; /* 向左子树中移动,继续查找 */
else /* X == BST->Data */
return BST; /* 查找成功,返回节点的找到节点的地址 */
}
return NULL; /* 查找失败 */
}
/* 查找最小元素的递归函数 */
Position FindMin(BinTree BST)
{
if ( !BST ) return NULL; /* 空的二叉搜索树,返回NULL */
else if ( !BST->Left )
return BST; /* 找到最左叶节点并返回 */
else
return FindMin(BST->Left); /* 沿左分支继续查找 */
}
/* 查找最小元素的迭代函数 */
Position FindMin(BinTree BST)
{
if ( BST )
while ( BST->Left ) BST = BST->Left;
/* 沿左分支继续查找,直到最右叶节点 */
return BST;
}
/* 查找最大元素的递归函数 */
Position FindMax(BinTree BST)
{
if ( !BST ) return NULL; /* 空的二叉搜索树,返回NULL */
else if ( !BST->Right )
return BST; /* 找到最右叶节点并返回 */
else
return FindMin(BST->Right); /* 沿右分支继续查找 */
}
/* 查找最大元素的迭代函数 */
Position FindMax(BinTree BST)
{
if ( BST )
while ( BST->Right ) BST = BST->Right;
/* 沿左分支继续查找,直到最右叶节点 */
return BST;
}