本题,先用getline获取一行数据,然后对每一组数据进行处理,用两个数组分别保存某个节点的左孩子以及右孩子,那么保存的是ascii码值,这样在中序遍历的时候,可以采用递归的方式,代码如下:
//@author:hairu,wu
#include<iostream>
using namespace std;
const int max_n=1e4;
int lchild[max_n],rchild[max_n]; //保存ASCII码值
int cnt=0,tol=0;
//中序打印
void printNode(int root){
//左边
if(lchild[root]!=-1){
printNode(lchild[root]);
}
//打印
cnt++; //当前第n个节点,用于打印最后一个节点时不打印空格
cout<<(char)root;
if(cnt!=tol) cout<<" ";
//右边
if(rchild[root]!=-1){
printNode(rchild[root]);
}
}
int main(){
string str;
getline(cin,str);
int root;
for(int i=0;i<=str.length()-5;i+=7){
int x=str[i];
int y=str[i+2];
int num=str[i+4]-'0';
//根据num值进行判断
if(num == 0){
//根节点
root =x; //ascii值
} else if(num == 1){
//左孩子
lchild[y] = x; //y的左孩子是x
}else if(num == 2){
rchild[y]=x;
}
//因为x这是一个新增的节点,所以将它的左右两个孩子都只为-1
lchild[x]=-1;
rchild[x]=-1;
tol++;//节点总个数
}
printNode(root);//打印
return 0;
}