已知二叉树的一个按先序遍历输入的字符序列,如abc,de,g,f, (其中,表示空结点)。请建立二叉树并按中序和后序的方式遍历该二叉树。
Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
Output
每组输入数据对应输出2行:
第1行输出中序遍历序列;
第2行输出后序遍历序列。
Sample Input
abc,de,g,f,
Sample Output
cbegdfa
cgefdba
- #include <iostream>
- #include <algorithm>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
-
- using namespace std;
-
- char a[100];
- int shu;
- struct node
- {
- int data;
- struct node *lchild, *rchild;
- };
- struct node *creat()
- {
- struct node *root;
- char c;
- c = a[shu++];
- if(c == ',')
- {
- return NULL;
- }
- else
- {
- root = (struct node *)malloc(sizeof(struct node));
- root->data = c;
- root->lchild = creat();
- root->rchild = creat();
- }
- return root;
- };
- void mid(struct node *root)
- {
- if(root)
- {
- mid(root->lchild);
- printf("%c", root->data);
- mid(root->rchild);
- }
- }
- void after(struct node *root)
- {
- if(root)
- {
- after(root->lchild);
- after(root->rchild);
- printf("%c", root->data);
- }
- }
- int main()
- {
- struct node *root;
- while(~scanf("%s", a))
- {
- shu = 0;
- root = (struct node *)malloc((sizeof(struct node)));
- root = creat();
- mid(root);
- printf("\n");
- after(root);
- printf("\n");
- }
- return 0;
- }
-