重建二叉树
step1 已知先序找根
step2 拿根找中序
step3 先序为空 返回
#include <iostream>
#include <string>
using namespace std;
struct TreeNode{
char data;
TreeNode* left;
TreeNode* right;
};
TreeNode* Rebuild(string PreOrder,string InOrder){
if(PreOrder.size()==0){
return NULL;
}else{
char rootdata=PreOrder[0];
TreeNode* pNew=new TreeNode;
pNew->data=rootdata;
//分解中序序列
int pos=InOrder.find(rootdata);
//左子树先序 中序 右子树先序 中序
pNew->left= Rebuild(PreOrder.substr(1,pos),InOrder.substr(0,pos));
pNew->right = Rebuild(PreOrder.substr(pos+1),InOrder.substr(pos+1));
return pNew;
}
}
void PostOrder(TreeNode* proot){
if(proot==NULL){
return;
}
PostOrder(proot->left);
PostOrder(proot->right);
printf("%c",proot->data);
}
int main(){
char PreOrder[30];
char InOrder[30];
while(scanf("%s%s",PreOrder,InOrder)!=EOF){
TreeNode* proot;
proot= Rebuild(PreOrder,InOrder);
PostOrder(proot);
printf("\n");
}
}