下面是糾結了好久完成的,還是沒有完全理解樹的概念所致:
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree Creat(BiTree p);
void preorder(BiTree p);
void inorder(BiTree p);
void postorder(BiTree p);
int main()
{
BiTree T;
T = Creat(T);
preorder(T);
printf("\n");
inorder(T);
printf("\n");
postorder(T);
printf("\n");
system("pause");
return 0;
}
BiTree Creat(BiTree p)//創建二叉樹
{
char ch;
ch = getchar();//在輸入的時候,由於創建時是按照先序的,所以輸入時應該按先序輸入
if(ch == '#')
p = NULL;
else
{
if(!(p = (BiTNode *)malloc(sizeof(BiTNode))))
printf("Error!\n");
p->data = ch;
p->lchild = Creat(p->lchild);
p->rchild = Creat(p->rchild);
}
return p;
}
void preorder(BiTree p)// 先序遍歷
{
if(p)
{
printf("%c",p->data);
preorder(p->lchild);
preorder(p->rchild);
}
}
void inorder(BiTree p)// 中序遍歷
{
if(p)
{
inorder(p->lchild);
printf("%c",p->data);
inorder(p->rchild);
}
}
void postorder(BiTree p)// 後序遍歷
{
if(p)
{
postorder(p->lchild);
postorder(p->rchild);
printf("%c",p->data);
}
}
自己學會建立二叉樹,否則在輸入時無法正常輸出,我剛開始就煩了這樣的錯……