#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
struct node;
typedef node *tree;
struct node{
char data;
tree lchild,rchild;
};
tree bt;
void build(tree &bt){
char ch;
ch=getchar();
if(ch!='.'){
bt=new node;
bt->data=ch;
build(bt->lchild);
build(bt->rchild);
}
else
bt=NULL;
}
void prework(){
ios::sync_with_stdio(false);
//freopen("data.in","r",stdin);
build(bt); //建树
}
void preorder(tree bt){
if(bt){
cout<<bt->data;
preorder(bt->lchild);
preorder(bt->rchild);
}
}
void midorder(tree bt){
if(bt){
preorder(bt->lchild);
cout<<bt->data;
preorder(bt->rchild);
}
}
void backorder(tree bt){
if(bt){
preorder(bt->lchild);
cout<<bt->data;
preorder(bt->rchild);
}
}
void mainwork(){
preorder(bt);
cout<<endl;
midorder(bt);
cout<<endl;
backorder(bt);
}
int main(){
prework();
mainwork();
return 0;
}
//我这里输入的东西是要求叶子节点的子节点为'.'
表示好像不太记得自己怎么打的了.....似乎不记得样例的样子.....但是思想保证是对的哈,这个程序还是可以的。
追问运行调试中序,后序结果重复,你写代码错误
我把后序代码改成这样还是重复
void backorder(tree bt){
if(bt){
preorder(bt->lchild);
preorder(bt->rchild);
coutdata;
追答对哦....嗯嗯,你改了就好啦
追问改了还是不行
追答哦?...
大概知道思想了么,递归建树就是先记录根节点再记录左子树,再是右子树。
然后前序中序后序就是分别为先根,第二根,最后根的三种遍历方法啊?
然后是不是不会输入啊......
我看看我的代码:AE...BC..D..建的树应该长成:(如果连的是空就打个.)
A
/ \
E B
/ \
C D
大概这样吧...如果还是错的就对不起啦...可能我程序就是错的