C++解法
重建二叉树
http://www.nowcoder.com/questionTerminal/8a19cbe657394eeaac2f6ea9b0f6fcf6
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
return Constructor(pre,0,pre.size(),vin,0,vin.size());
}
TreeNode* Constructor(vector<int>& pre,int pleft, int pright, vector<int>& vin, int vleft, int vright ){
TreeNode* root = new TreeNode(pre[pleft]);
if(pright-pleft==1 && vright-vleft == 1) {return root;}
int root_index;
for(int i=vleft;i<vright;i++){
if(vin[i]==pre[pleft]) {root_index = i; break;}
}
int leftTreeNodesNum = root_index - vleft;
if(leftTreeNodesNum>0) root->left = Constructor(pre,pleft+1,pleft+leftTreeNodesNum+1,vin,vleft,root_index);
int rightTreeNodesNum = vright - root_index - 1;
if(rightTreeNodesNum>0) root->right = Constructor(pre,pleft+leftTreeNodesNum+1,pright,vin,root_index+1,vright);
return root;
}
}; 