#include<stdio.h>
typedef struct TreeNode *BinTree;
struct TreeNode
{
int Data;
BinTree Left,Right;
};
BinTree BST_FindMin(BinTree BST);
BinTree BST_Insert(int X,BinTree BST)
{
if(!BST)
{
BST=(BinTree)malloc(sizeof(struct TreeNode));
BST->Left=BST->Right=NULL;
BST->Data=X;
}
else
{
if(X<BST->Data)
{
BST->Left=BST_Insert(X,BST->Left);
}
if(X>BST->Data)
{
BST->Right=BST_Insert(X,BST->Right);
}
}
return BST;
}
BinTree BST_Delete(int X,BinTree BST)
{
BinTree Tmp;
if(!BST)
{
printf("要删除的元素不存在");
}
else
{
if(X<BST->Data)
{
BST->Left=BST_Delete(X,BST->Left);
}
else if(X>BST->Data)
{
BST->Right=BST_Delete(X,BST->Right);
}
else
{
if(BST->Left&&BST->Right)
{
Tmp=BST_FindMin(BST->Right);
BST->Data=Tmp->Data;
BST->Right=BST_Delete(Tmp->Data,BST->Right);
}
else if(!BST->Left)
{
Tmp=BST;
BST=BST->Right;
free(Tmp);
}
else if(!BST->Right)
{
Tmp=BST;
BST=BST->Left;
free(Tmp);
}
}
return BST;
}
}
int BST_Depth(BinTree BST)
{
if(BST)
{
int LeftDepth,RightDepth;
LeftDepth=BST_Depth(BST->Left);
RightDepth=BST_Depth(BST->Right);
return ((LeftDepth>=RightDepth?LeftDepth:RightDepth)+1);
}
else return 0;
}
void BST_InTraversal(BinTree BST)
{
if(BST)
{
BST_InTraversal(BST->Left);
printf("%d ",BST->Data);
BST_InTraversal(BST->Right);
}
}
BinTree BST_FindX(int X,BinTree BST)
{
if(!BST)
{
printf("查找的元素不存在");
return NULL;
}
else
{
if(X<BST->Data)
return BST_FindX(X,BST->Left);
else if(X>BST->Data)
return BST_FindX(X,BST->Right);
else if(X==BST->Data)
return BST;
}
}
BinTree BST_FindMin(BinTree BST)
{
BinTree Tmp=BST;
while(!Tmp->Left)
{
Tmp=Tmp->Left;
}
return Tmp;
}
BinTree BST_FindMax(BinTree BST)
{
BinTree Tmp=BST;
while(!Tmp->Right)
{
Tmp=Tmp->Right;
}
return Tmp;
}
int main()
{
BinTree BST1=NULL;
while(1)
{
printf("输入需要的操作:\nA.插入元素\nB.删除元素\nC.求深度\nD.中序遍历\nE.退出\n");
char c;
scanf("%c",&c);
if(c=='A')
{
printf("输入要插入的元素:\n");
int a;
scanf("%d",&a);
BST1=BST_Insert(a,BST1);
}
if(c=='B')
{
printf("输入要删除的元素:\n");
int a;
scanf("%d",&a);
BST1=BST_Delete(a,BST1);
}
if(c=='C')
{
int n=BST_Depth(BST1);
printf("树的深度为:%d\n",n);
}
if(c=='D')
{
printf("中序遍历为:\n");
BST_InTraversal(BST1);
printf("\n");
}
if(c=='E')
break;
char m=getchar();
}
return 0;
}
C语言-二叉搜索树练习
最新推荐文章于 2024-07-07 20:02:38 发布