/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
TreeNode *root = __buildTree(preorder, 0, preorder.size() - 1, inorder, 0, inorder.size() - 1);
return root;
}
private:
TreeNode *__buildTree(vector<int>& preorder, int pre_be, int pre_end, vector<int>& inorder, int in_be, int in_end) {
if (in_be > in_end)
return nullptr;
int base = preorder[pre_be];
TreeNode *root = new TreeNode(preorder[pre_be]);
int i;
for (i = in_be; i <= in_end; ++i) {
if (inorder[i] == base)
break;
}
int pre_l_be = pre_be + 1;
int pre_l_end = pre_be + i - in_be; //这一步需要思考
int in_l_be = in_be;
int in_l_end = i - 1;
int pre_r_be = pre_be + i - in_be + 1; //。。
int pre_r_end = pre_end;
int in_r_be = i + 1;
int in_r_end = in_end;
root->left = __buildTree(preorder, pre_l_be, pre_l_end, inorder, in_l_be, in_l_end);
root->right = __buildTree(preorder, pre_r_be, pre_r_end, inorder, in_r_be, in_r_end);
return root;
}
};
剑指 Offer 07. 重建二叉树
最新推荐文章于 2024-10-18 23:40:34 发布