#include <iostream>
#include <stack>
using namespace std;
typedef int ElemType;
typedef struct TreeNode *BinTree;
typedef BinTree Position;
typedef struct TreeNode //二叉树的表示
{
ElemType Data;
BinTree Left;
BinTree Right;
};
//在二叉搜索树中查找值为X的结点
//递归算法
Position Find(ElemType 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
return BST;
}
//非递归算法
Position Find(ElemType X, BinTree BST)
{
while (BST)
{
if (X < BST->Data)
BST = BST->Left;
else if (X > BST->Data)
BST = BST->Right;
else
return BST;
}
return NULL;//查找失败
}
//在二叉搜索树中查找值最大和最小的元素
Position FindMin(BinTree BST)
{
if (!BST)
return NULL; //空的二叉搜素树返回NULL
else if (!BST->Left)
return BST; //找到最左叶结点并返回
else
FindMin(BST->Left);
}
Position FindMax(BinTree BST)
{
if (BST)
{
while (BST->Right)
{
BST = BST->Right;
}
return BST;
}
}
//二叉搜索树的插入
BinTree Insert(ElemType X, BinTree BST)
{
if (!BST) //若原树为空,生成并返回一个结点的二叉搜索树
{
BST = new 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); //递归插入右子树
//else X已经存在,什么都不做
return BST;
}
//二叉搜索树的删除
BinTree Delete(ElemType X, BinTree BST)
{
if (!BST)
cout << "要删除的元素未找到";
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) //被删除的结点有左右两个子结点
{
BinTree Tmp = FindMin(BST->Right); //在右子树中找最小的元素填充删除结点
BST->Data = Tmp->Data;
BST->Right = Delete(BST->Data, BST->Right);
}
else //被删除的结点有一个或无子结点
{
if (!BST->Left)
BST = BST->Right;
else if (!BST->Right)
BST = BST->Left;
delete BST;
}
}
return BST;
}
二叉搜索树
最新推荐文章于 2024-08-16 21:27:26 发布