二叉查找树的查找和插入和删除操作

二叉搜索树也称二叉排序树或二叉查找树;

二叉搜索树:一颗二叉树可以为空;如果不为空,满足以下性质:

1.非空左子树的所有键值小于其根结点的键值。

2.非空右子树的所有键值大于其根节点的键值。

3.左、右子树都是二叉搜索树。

 

查找:Find

1.若X小于根节点键值,只需在左子树中继续搜索

2.若X大于根节点键值,只需在右子树中继续搜索

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 (X > BST->Data)

      BST = BST->Right;  //向右子树中移动,继续查找

    else if (X < BST->Data)

      BST = BST->Left;  //向左子树中移动,继续查找

    else

      return BST;

  }

  return NULL;  //查找失败

}

查找的效率取决于树的高度

 

查找最大和最小元素

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

1.查找最小元素的递归函数

Position FindMin (BinTree BST) {

  if (!BST)   return NULL;  //空的二叉搜索树,返回NULL

  else if (!BST->Left)

    return BST;  //找到最左叶结点并返回

  else

    return FindMin (BST->Left)  //沿左分枝继续查找

}

 

2.查找最大元素的迭代函数

Position FindMax (BinTree BST) {

  if (BST) {

    while (BST->Right) {

      BST = BST->Right;  

      //沿右分枝继续查找,直到最右叶结点

    }

  }

  return BST;

}

 

插入

BinTree Insert (ElementType X, BinTree BST) {

  if (!BST) {

    //若原树为空,生成并返回一个结点的二叉搜索树

    BST = malloc (sizeof(struct 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);

  }

  return BST;

}

 

 

 

上一篇:BST 二叉查找树


下一篇:ML之xgboost:利用xgboost算法(自带方式)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)