题解 | #重建二叉树#
重建二叉树
http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6
class Solution {
public:
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
if(pre.size()==0 || vin.size()==0) return nullptr;
// 找到根节点的值,并构建根节点
int rootval = pre[0];
TreeNode* root = new TreeNode(rootval);
// 找到根节点在中序数组中的位置,可以标志左右子树的节点各有多少个
int index=0;
for(; index<vin.size(); index++) {
if(vin[index] == rootval) {
break;
}
}
// 切割数组 vin
vector<int> vinleft(vin.begin(), vin.begin()+index);
vector<int> vinright(vin.begin()+index+1, vin.end());
// 切割数组 pre
vector<int> preleft(pre.begin()+1, pre.begin()+1+index);
vector<int> preright(pre.begin()+1+index, pre.end());
// 递归生成左右子树
root->left = reConstructBinaryTree(preleft, vinleft);
root->right = reConstructBinaryTree(preright, vinright);
// 返回根节点
return root;
}
}; 
