马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
输入数据建立一个二叉排序树,按照前序、中序后序输出,
这是我写的代码,我看了好久不知道错哪了。但是运行结果仿佛贼错。
输入的数据根据顺序输出的数据个数都不一定
#include <stdio.h>
#include <stdlib.h>
struct Node
{
Node *lchild;
Node *rchild;
int num;
};//定义结点类型便于创建树
void preOrder(Node *T)
{
printf("%d ",T->num);
if (T->lchild != NULL)
{
preOrder(T->lchild);
}
if (T->rchild)
{
preOrder(T->rchild);
}
}//前序遍历
void inOrder(Node *T)
{
if (T->lchild != NULL)
{
preOrder(T->lchild);
}
printf("%d ",T->num);
if (T->rchild)
{
preOrder(T->rchild);
}
}//中序遍历
void postOrder(Node *T)
{
if (T->lchild != NULL)
{
preOrder(T->lchild);
}
if (T->rchild)
{
preOrder(T->rchild);
}
printf("%d ",T->num);
}//后序遍历
Node *Insert(Node *T,int x)
{//插入数字x
if (T == NULL)
{//树为空
T = (Node*)malloc(sizeof(Node));//申请一个结点空间作为根节点
T->lchild = NULL;
T->rchild = NULL;
T->num = x;
return T;
}
else if (x < T->num)
{//插入T的左子树
T->lchild = Insert(T->lchild,x);
}
else if (x > T->num);
{//插入T的右子树
T->rchild = Insert(T->rchild,x);
}
return T;//返回根节点指针
}
void deleteT(Node *T)
{
if(T->lchild != NULL)
{
deleteT(T->lchild);
}//释放左子树
if(T->rchild != NULL)
{
deleteT(T->rchild);
}//释放右子树
free(T);//释放根结点
}
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
Node *T = NULL;//初始化根结点指针为空
for (int i = 0; i < n; i++)
{
int x;
scanf("%d",&x);
T = Insert(T,x);//插入数字
}
preOrder(T); //前序遍历输出
printf("\n");
inOrder(T);//中序遍历输出
printf("\n");
postOrder(T);//后序遍历输出
printf("\n");
deleteT(T);// 释放树结点
}
return 0;
}
|