Problem Description
已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并按中序和后序的方式遍历该二叉树。
Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
Output
每组输入数据对应输出2行:
第1行输出中序遍历序列;
第2行输出后序遍历序列。
Example Input
abc,,de,g,,f,,,
Example Output
cbegdfacgefdba
Hint
Author
xam
#include<stdio.h> #include<string.h> #include<stdlib.h> #define ElementType char//数据类型选择 struct BinTree { ElementType data; struct BinTree *left; struct BinTree *right; }; ElementType s[55]; int cnt; struct BinTree *creat() { struct BinTree *BT; if(s[++cnt] == ',') { BT = NULL; } else { BT = (struct BinTree *)malloc(sizeof(struct BinTree)); BT->data = s[cnt]; BT->left = creat(); BT->right = creat(); } return BT; } void InOrderTraversal(struct BinTree *BT)//中序遍历 { if(BT) { InOrderTraversal(BT->left); printf("%c",BT->data); InOrderTraversal(BT->right); } } void PostOrderTraversal(struct BinTree *BT)//后序遍历 { if(BT) { PostOrderTraversal(BT->left); PostOrderTraversal(BT->right); printf("%c",BT->data); } } int main() { struct BinTree *BT; while(gets(s)) { cnt = -1; BT = creat(); InOrderTraversal(BT); printf("\n"); PostOrderTraversal(BT); printf("\n"); } return 0; }