给定两个序列,根据前序和中序构造二叉树:
例如前序遍历{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}
/**
* 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) {
TreeNode *root = reConstructFunc(pre,0,pre.size()-1,vin,0,vin.size()-1);
return root;
}
TreeNode *reConstructFunc(vector<int> pre,int pre_begin,int pre_len,vector<int> vin,int vin_begin,int vin_len)
{
if(pre_len<pre_begin||vin_len<vin_begin)
return NULL;
TreeNode* root = new TreeNode(pre[pre_begin]);
for(int i=vin_begin;i<=vin_len;++i)
{
if(pre[pre_begin]==vin[i])
{
root->left = reConstructFunc(pre,pre_begin+1,pre_begin+i-vin_begin,vin,vin_begin,i-1);
root->right = reConstructFunc(pre,i-vin_begin+1+pre_begin,pre_len,vin,i+1,vin_len);
}
}
return root;
}
};