#include <stdio.h>
#include <malloc.h>
typedef char ElemType;//二叉樹數組類型為字元
//二叉樹定義
typedef struct node
{
ElemType data;//節點資訊
struct node* lchild, * rchild;//左右兒子,增加,*parent雙親指針就是三叉鍊
}Bnode,*BTree;
//初始化二叉鍊
void InitBTree(BTree& BT)
{
BT = NULL;
}
//建立二叉鍊
void CreateBTree(BTree &BT)//分别指向左右
{
char data;
data = getchar();
if (data == '#') BT = NULL;
else
{
BT = (BTree)malloc(sizeof(Bnode));//配置設定空間
BT->data = data;
CreateBTree(BT->lchild);//分别建立左右節點
CreateBTree(BT->rchild);
}
}
//void visit(BTree p)
//{
// printf_s("%c", p->data);//通路根節點
//}
//先序(根)周遊
void preorder(BTree p)
{
if (p != NULL)
{
//visit(p);
printf_s("%c", p->data);//通路根節點
preorder(p->lchild);//周遊左
preorder(p->rchild);//周遊右
}
}
//中序(根)周遊
void inorder(BTree p)
{
if (p != NULL);
{
inorder(p->lchild);//中根順序周遊左子樹
//visit(p);//通路根節點
printf_s("%c", p->data);//通路根節點
inorder(p->rchild);
}
}
//後根周遊
void postorder(BTree p)
{
if (p != NULL)
{
postorder(p->lchild);//按後根周遊左子樹
postorder(p->rchild);
//visit(p);
printf_s("%c", p->data);//通路根節點
}
}
int main()
{
BTree bt;
//printf_s("二叉樹初始化中....");
InitBTree(bt);//初始化樹
printf_s("請輸入給定的先根序列:\n");
CreateBTree(bt);//建立樹
printf_s("給定的二叉樹先跟序列為:\n");
preorder(bt);//先跟周遊
printf_s("二叉樹中序序列結果為:\n");
inorder(bt);//中根周遊
printf_s("二叉樹後序序列為:\n");
postorder(bt);//後根周遊
return 0;
}
有問題留言