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; } };