数据结构实验之二叉树二:遍历二叉树
Time Limit: 1000MS Memory limit: 65536K
题目描述
已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并按中序和后序的方式遍历该二叉树。
输入
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
输出
每组输入数据对应输出2行:
第1行输出中序遍历序列;
第2行输出后序遍历序列。
示例输入
abc,,de,g,,f,,,
示例输出
cbegdfacgefdba
#include <iostream> #include <algorithm> #include <cstring> using namespace std; typedef struct node { char data; struct node *lchild,*rchild; } node,*tree; int xiancreat(tree &t); void inorder(tree t); void visit(tree t); void posorder(tree t); char c[60]; int i; int main() { tree t; while(cin>>c) { i=0; xiancreat(t); inorder(t); cout<<endl; posorder(t); cout<<endl; } } int xiancreat(tree &t) { char a; a=c[i++]; if(a==',') t=NULL; else { t=(tree)malloc(sizeof(node)); if(!t) exit(0); t->data=a; xiancreat(t->lchild);//注意一直循环,也就一直循环输入 xiancreat(t->rchild); } return 0; } void visit(tree t) { if(t->data!=',') cout<<t->data; } void inorder(tree t) { if(t!=NULL) { inorder(t->lchild); visit(t); inorder(t->rchild); } } void posorder(tree t) { if(t!=NULL) { posorder (t->lchild); posorder (t->rchild); visit(t); } }