1.思路:
首先确定可以采用递归的求解方式,其次观察递归函数的输入变量为两个vector< int >,确定递归形式中一定要存放两个vector< int >,观察前序遍历和中序遍历中根节点、根左边结点、根右边节点它们存在的规律,分别将其存入pre_left, pre_right, mid_left, mid_right的vector中,再进行递归调用。
2.代码
/**
* 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) {
int len = pre.size();
if(len == 0) return NULL;
vector<int> pre_left, pre_right, mid_left, mid_right;
int idx;
for(int i = 0; i < len; ++i) {
if(pre[0] == vin[i]) {
idx = i;
break;
}
}
TreeNode* head = new TreeNode(pre[0]);
for(int i = 0; i < idx; ++i) {
pre_left.push_back(pre[i + 1]);
mid_left.push_back(vin[i]);
}
for(int i = idx + 1; i < len; ++i) {
pre_right.push_back(pre[i]);
mid_right.push_back(vin[i]);
}
head->left = reConstructBinaryTree(pre_left, mid_left);
head->right = reConstructBinaryTree(pre_right, mid_right);
return head;
}
};