时间限制: 15 Sec 内存限制: 128 MB
提交: 1764 解决: 1210
题目描述
从键盘接收扩展先序序列,以二叉链表作为存储结构,建立二叉树。输出这棵二叉树的先序、中序和后序遍历序列。
二叉树结点的data是字符类型数据, 其中#表示空格字符。
样例输入 Copy
ABC##DE#G##F###
样例输出 Copy
ABCDEGF
CBEGDFA
CGEFDBA
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 100
//节点类型定义
typedef struct Node{
char data;
struct Node* Lchild;
struct Node* Rchild;
}BiTNode, *BiTree;
void Visit(char p) //访问节点数据
{
printf("%c", p);
}
void PreOrder(BiTree root) //先序遍历递归
{
if(root)
{
Visit(root->data);
PreOrder(root->Lchild);
PreOrder(root->Rchild);
}
}
void InOrder(BiTree root) //中序遍历递归
{
if(root)
{
InOrder(root->Lchild);
Visit(root->data);
InOrder(root->Rchild);
}
}
void PostOrder(BiTree root)
{
if(root)
{
PostOrder(root->Lchild);
PostOrder(root->Rchild);
Visit(root->data);
}
}
void CreateBiTree(BiTree *root)
{
char ch;
ch = getchar();
if(ch == '#')
*root = NULL;
else
{
(*root) = (BiTree)malloc(sizeof(BiTNode));
(*root)->data = ch;
CreateBiTree(&((*root)->Lchild));
CreateBiTree(&((*root)->Rchild));
}
}
int main()
{
BiTree root;
CreateBiTree(&root);
PreOrder(root);
printf("\n");
InOrder(root);
printf("\n");
PostOrder(root);
return 0;
}