- 先序建立和先序遍历是类似的
- 空指针可以用nullptr
#include<iostream>
#include<string>
using namespace std;
struct node{//结点
char data;
node* leftchild;
node* rightchild;
node(char c):data(c),leftchild(nullptr),rightchild(nullptr){}
};
node* build(string s,int& pos){//根据先序序列建立二叉树(序列,当前字符位置)
char c=s[pos++];//每调用一次,pos都要++
if(c=='#'){
return nullptr;
}
node* root=new node(c);
root->leftchild=build(s,pos);
root->rightchild=build(s,pos);
return root;
}
void LNR(node* root){//中序访问
if(root==nullptr)return;
LNR(root->leftchild);
printf("%c ",root->data);
LNR(root->rightchild);
}
int main(){
string s;
while(cin>>s){
int pos=0;
node* root=build(s,pos);
LNR(root);
printf("\n");
}
return 0;
}