#include<stdio.h>
#include<stdlib.h>
typedef struct NodeTree Tree;
struct NodeTree {
char val;//数据域
Tree* left;//左孩子
Tree* right;//右孩子
};
Tree* Create(Tree* T)//创建二叉树
{
char ch;
scanf("%c", &ch);
if (ch == '#') {//利用#作为结束符构建拓展二叉树
T = NULL;
}
else {
T = (Tree*)malloc(sizeof(Tree));
T->val = ch;
if (!T) {
exit(0);
}
T->left = Create(T->left);
T->right = Create(T->right);
}
return T;
}
void PreOrderTraverse(Tree* T)//前序遍历
{
if (!T)
return;
printf("%c ", T->val);
PreOrderTraverse(T->left);
PreOrderTraverse(T->right);
}
void InOrderTraverse(Tree* T)//中序遍历
{
if (!T)
return;
InOrderTraverse(T->left);
printf("%c ", T->val);
InOrderTraverse(T->right);
}
void PostOrderTraverse(Tree* T)//后序遍历
{
if (!T)
return;
PreOrderTraverse(T->left);
PreOrderTraverse(T->right);
printf("%c ", T->val);
}
int main()
{
Tree* T;
T = Create(NULL);
printf("\n前序遍历:\n");
PreOrderTraverse(T);
printf("\n中序遍历:\n");
InOrderTraverse(T);
printf("\n后序遍历:\n");
PostOrderTraverse(T);
printf("\n");
return 0;
}
效果图: