//-------------------------------
//根据前序+中序遍历,重构二叉树
//---------------------------------
#include<iostream>
#include<string>
using namespace std;
typedef struct treenode {
char data;
struct treenode * left;
struct treenode * right;
}tree, *ptree;
void createTree(ptree & T,string preStr, string midStr) {
if(0==preStr.length()){
T=NULL;
return ;
}
char rootData = preStr[0]; //根
int index = midStr.find(rootData);
string mid_left = midStr.substr(0,index); //左孩子的中序遍历
string mid_right = midStr.substr(index+1); //右孩子的中序遍历
int mid_left_len = mid_left.length();
string pre_left = preStr.substr(1,mid_left_len); //左孩子的前序遍历
string pre_right = preStr.substr(mid_left_len+1); //右孩子的前序遍历
T = new tree;
if(NULL!=T) {
T->data=rootData;
createTree(T->left,pre_left, mid_left);
createTree(T->right,pre_right,mid_right);
}
}
void post_print(ptree root){
if(NULL==root) {
return;
}
post_print(root->left);
post_print(root->right);
cout<<root->data<<" ";
}
int main() {
string preStr="124536";
string midStr="425163";
ptree root ;
createTree(root,preStr,midStr);
post_print(root);
cout<<""<<endl;
system("pause");
return 1;
}
参考:http://blog.csdn.net/yunzhongguwu005/article/details/9270085