#include<stdlib.h>
typedef struct node{ //定義節點
int data;
struct node *lchild;
struct node *rchild;
}Btnode;
Btnode *create_Btnode() //先序構造二叉樹
{
Btnode *T;
int x;
scanf("%d",&x);
if(x==0)
return NULL;
else
{
T=(Btnode *)malloc(sizeof(Btnode)); //申請新節點
T->data=x;
T->lchild=create_Btnode();
T->rchild=create_Btnode();
}
return T;
}
void preOrder(Btnode *T) //先序遍歷遞歸算法
{
if(T!=NULL)
{
printf("%d ",T->data);
preOrder(T->lchild);
preOrder(T->rchild);
}
}
void inOrder(Btnode *T) //中序遍歷遞歸算法
{
if(T!=NULL)
{
inOrder(T->lchild);
printf("%d ",T->data);
inOrder(T->rchild);
}
}
void postOrder(Btnode *T) //後序遍歷遞歸算法
{
if(T!=NULL)
{
postOrder(T->lchild);
postOrder(T->rchild);
printf("%d ",T->data);
}
}
int main()
{
Btnode *create_Btnode(); //創建鏈式二叉樹
void preOrder(Btnode *T); //先序遍歷遞歸算法
void inOrder(Btnode *T); //中序遍歷遞歸算法
void postOrder(Btnode *T); //後序遍歷遞歸算法
Btnode *T;
printf("請按先序的方式輸入二叉樹的節點元素:");
T=create_Btnode();
printf("前序輸出:");
preOrder(T);
printf("\n");
printf("中序輸出:");
inOrder(T);
printf("\n");
printf("後序輸出:");
postOrder(T);
printf("\n");
return 0;
}