您的位置:首页 > 其它

查找二叉树的操作

2015-06-29 00:10 260 查看
#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct TreeNode *SearchTree;
typedef struct TreeNode *position;
struct TreeNode
{
Elemtype Element;
SearchTree Left;
SearchTree Right;
};

/*建立一颗空树*/
SearchTree MakeEmpty(SearchTree T)
{
if(T != NULL)
{
MakeEmpty(T->Left);
MakeEmpty(T->Right);
free(T);
}
return NULL;
}

/*查找树中最小的值所在的位置*/
position FindMin(SearchTree T)
{
if(T == NULL)
return NULL;
if(T->Left)
return FindMin(T->Left);
else
return T;
}

/*查找树中最大的值所在的位置*/
position FindMax(SearchTree T)
{
if(T == NULL)
return NULL;
if(T->Right)
return T->Right;
else
return T;
}

/*插入结点*/
SearchTree Insert(SearchTree T,Elemtype x)
{
if(T == NULL)
{
T = (SearchTree)malloc(sizeof(struct TreeNode));
if(!T)
{
printf("Out of space\n");
exit(1);
}
T->Element = x;
T->Left = T->Right = NULL;
}
else
{
if(x > T->Element)
T->Right = Insert(T->Right,x);
else if(x < T->Element)
T->Left = Insert(T->Left,x);
}
return T;
}

/*删除结点*/
SearchTree Delete(SearchTree T,Elemtype x)
{
if(T == NULL)
printf("Element not found\n");
else if(x < T->Element)
T->Left = Delete(T->Left,x);
else if(x > T->Element)
T->Right = Delete(T->Right,x);
else
{
if(T->Left&&T->Right)
{
T = FindMax(T->Right);
Delete(T->Right,T->Element);
}
else
{
SearchTree TmpNode;
TmpNode = T;
if(T->Left)
T = T->Left;
else
T = T->Right;
free(TmpNode);
}
}
return T;
}

/*中序输出查找二叉树*/
void PrintSearchTree(SearchTree T)
{
if(T->Left)
PrintSearchTree(T->Left);
if(T)
printf("%d ",T->Element);
if(T->Right)
PrintSearchTree(T->Right);
}
/*测试*/
int main(void)
{
int n;
SearchTree T = NULL;
T = MakeEmpty(T);
while(scanf("%d",&n)!=EOF)
{   if(n == 0)
break;
T = Insert(T,n);
}
PrintSearchTree(T);
printf("\n输去你想删除的结点\n");
scanf("%d",&n);
T = Delete(T,n);
PrintSearchTree(T);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: