递归
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
//采用递归做法,先序中第一个为当前根,再从中序总找到当前根的位置,设定四个数组,分别是左边的先序,左边中序
//右边先序,右边后序,根据中序中根的位置,分别填充四个数组,然后递归的处理左边,递归的处理右边,如果数组中没值则返回NULL,有值则返回
struct TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> in) {
if (in.size() == 0) return NULL;
TreeNode* node = new TreeNode(pre[0]);
vector<int>preleft, inleft, preright, inright;
int pos = 0;
for (int i = 0; i < in.size(); i++)
{
if (in[i] != pre[0])
{
pos++;
}
else
{
break;
}
}
for (int i = 0; i < pos; i++)
{
preleft.push_back(pre[i + 1]);
inleft.push_back(in[i]);
}
for (int i = pos+1; i < in.size(); i++)
{
preright.push_back(pre[i]);
inright.push_back(in[i]);
}
node->left = reConstructBinaryTree(preleft, inleft);
node->right = reConstructBinaryTree(preright, inright);
return node;
}
};