/*====================================================
程式功能:輸入二叉樹先序序列,輸出先序,中序,後序序列
作者:令狐榮豪
完成日期:2019/5/19
=====================================================*/
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode
{
char data;//定義二叉連結清單的結構體
struct BiTNode *lchild, *rchild;
}Bitree;
Bitree *CreateBtree_DLR(Bitree* root);//以先序周遊二叉樹
void PreOrder(Bitree* T);//先序周遊二叉樹
void InOrder(Bitree *T);//中序周遊二叉樹
void PostOrder(Bitree *T);//後序周遊二叉樹
/*================================
函數功能:建構二叉樹
=================================*/
Bitree* CreateBtree_DLR(Bitree* root)
{
char ch;
scanf("%c", &ch);
if (ch == '@')
root = NULL;
else
{
root = (Bitree*)malloc(sizeof(Bitree));
root->data = ch;
root->lchild = CreateBtree_DLR(root->lchild);//構造左子樹
root->rchild = CreateBtree_DLR(root->rchild);//構造右子樹
}
return (root);
}
/*==================================
函數功能:先序周遊遞歸算法
函數輸入:樹的根結點
===================================*/
void PreOrder(Bitree *T)
{
if (T != NULL)
{
printf("%c", T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
/*==================================
函數功能:中序周遊
===================================*/
void InOrder(Bitree *T)
{
if (T != NULL)
{
InOrder(T->lchild);
printf("%c", T->data);
InOrder(T->rchild);
}
}
/*=================================
函數功能:後序周遊
==================================*/
void PostOrder(Bitree *T)
{
if (T != NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c",T->data);
}
}
int main()
{
Bitree *T = NULL;
printf("輸入二叉樹的先序周遊結點,建立二叉樹。(子樹為空時輸入@)\n");
T = CreateBtree_DLR(T);
printf("\n先序周遊結果:\n");
PreOrder(T);
printf("\n中序周遊結果:\n");
InOrder(T);
printf("\n後序周遊的結果:\n");
PostOrder(T);
return 0;
}