Construct Binary Tree from Preorder and Inorder Traversal
https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/
Thoughts
Code
/*
* @lc app=leetcode id=105 lang=cpp
*
* [105] Construct Binary Tree from Preorder and Inorder Traversal
*/
// @lc code=start
/**
* 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 *dfs(vector<int> &preorder, int p_s, int p_e, vector<int> &inorder, int i_s, int i_e) {
if (p_s > p_e) return nullptr;
const auto root = preorder[p_s++];
TreeNode *res = new TreeNode(root);
int lsize = 0;
for (int i = i_s; i <= i_e; ++i) {
if (inorder[i] == root) {
lsize = i - i_s;
break;
}
}
res->left = dfs(preorder, p_s, p_s + lsize - 1, inorder, i_s, i_s + lsize - 1);
res->right = dfs(preorder, p_s + lsize, p_e, inorder, i_s + lsize + 1, i_e);
return res;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
return dfs(preorder, 0, preorder.size() - 1, inorder, 0, inorder.size() - 1);
}
};
// @lc code=end
Analysis
Ver.2
Previous1443. Minimum Time to Collect All Apples in a TreeNextConstruct Binary Tree from Inorder and Postorder Traversal
Last updated