BinTree Insert( BinTree BST, ElementType X )
{
if (BST == NULL) {
BinTree Node = malloc(sizeof(struct TNode));
Node->Data = X;
Node->Left = Node->Right = NULL;
BST = Node;
}else
{
if (X < BST->Data) {
BST->Left = Insert(BST->Left, X);
}else if(X > BST->Data)
{
BST->Right = Insert(BST->Right, X);
}
}
return BST;
}
BinTree Delete( BinTree BST, ElementType X )
{
Position temp;
if (!BST) {
printf("Not Found\n");
}else if (BST->Data > X) {
BST->Left = Delete(BST->Left, X);
}else if (BST->Data < X)
{
BST->Right = Delete(BST->Right, X);
}else
{
if (BST->Left && BST->Right) {
temp = FindMin(BST->Right);
BST->Data = temp->Data;
BST->Right = Delete(BST->Right, temp->Data);
}else
{
temp = BST;
if (!BST->Left) {
BST = BST->Right;
}else if(!BST->Right)
{
BST = BST->Left;
}
free(temp);
}
}
return BST;
}
Position Find( BinTree BST, ElementType X )
{
if (!BST) {
return NULL;
}
if (BST->Data > X) {
return Find(BST->Left, X);
}else if(BST->Data < X)
{
return Find(BST->Right, X);
}else
{
return BST;
}
}
Position FindMin( BinTree BST )
{
if (!BST) {
return NULL;
}else if(!BST->Left)
{
return BST;
}else
{
return FindMin(BST->Left);
}
}
Position FindMax( BinTree BST )
{
if (BST) {
while (BST->Right) {
BST = BST->Right;
}
}
return BST;
}