# 【LeetCode】105. Construct Binary Tree from Preorder and Inorder Traversal 有參考網路上各位神人的寫法,不過我是靠自己把解題思路想出來,對於left and right的上下界線不是那麼清楚。 ```cpp= /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { return build(preorder, 0, preorder.size()-1, inorder, 0, inorder.size()-1); } TreeNode* build(vector<int>& pre, int pL, int pR, vector<int>& in, int iL, int iR){ if (iL > iR || pL > pR){ return NULL; } int mid = 0; for (mid = iL; mid <= iR; ++mid) { if (pre[pL] == in[mid]) break; } TreeNode *root = new TreeNode(pre[pL]); root->left = build(pre, pL+1, pL+mid-iL, in, iL, mid-1); root->right = build(pre, pL-iL+mid+1, pR, in, mid+1, iR); return root; } }; ``` ###### tags: `LeetCode` `程式`