二叉搜索数的应用

(一)二叉搜索树的查找操作Find

 1 Position Find(ElementType x,BinTree BST)
 2 {
 3   if(!BST) return NULL;
 4   if(x>BST->Data)
 5     return Find(x,BST->Rigeht);
 6   else if(x<BST->Data)
 7     return Find(x,BST->left);
 8   else
 9     return BST;
10 }

由于非递归函数的执行效率高,可将“尾递归”函数改为迭代函数

 1 Position ITerFind(ElementType x,BinTree BST)
 2 {
 3   while(BST)
 4   { 
 5      if(x>BST->Data)
 6         BST=BST->Right;
 7      else if(x<BST->Data)
 8         BST=BST->Left;
 9      else
10         return BST;
11    }
12    return NULL;
13 }

查找的效率决定于树的高度。
(二)查找最大和最小元素

  • 最大元素一定是在树的最右分枝的端结点上;
  • 最小元素一定是在树的最左分枝的端结点上。

查找最小元素的递归函数:

1 Position FindMin(BinTree BST)
2 {
3   if(!BST)return NULL;
4   else if(!BST->Left)
5     return BST;
6   else
7     return FindMin(BST->Left);
8 }

查找最大元素的迭代函数:

1 Position FindMax(BinTree BST)
2 {
3    if(BST)
4      while(BST->Right)  BST=BST->Right;
5    return BST;
6 }

 

posted @ 2017-04-24 11:07  锅里煮水  阅读(208)  评论(0编辑  收藏  举报