题解 | #前序中序创建二叉树#
重建二叉树
http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
//int类型的变量代表左右子树范围,递归创建左右子树
class Solution {
public:
TreeNode* DFS(int pl,int pr,int vl,int vr,vector<int> pre,vector<int> vin)
{
if(pl>pr||vl>vr)
return NULL;
int node=pre[pl];
TreeNode* root=new TreeNode(node);
int pos=vl;
while(vin[pos]!=node)
pos+=1;
int ltree=pos-vl;
int rtree=vr-pos;
root->left=DFS(pl+1,pl+ltree,vl,pos-1,pre,vin);
root->right=DFS(pl+ltree+1,pr,pos+1,vr,pre,vin);
return root;
}
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
int pre_l=pre.size();
int vin_l=vin.size();
return DFS(0,pre_l-1,0,vin_l-1,pre,vin);
}
};