/**
* 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 *constructFromPrePost(vector<int> &preorder, vector<int> &postorder) {
for (int i = 0; i < postorder.size(); ++i) {
postValToIdx[postorder[i]] = i;
}
return buildTree(preorder, 0, preorder.size() - 1,
postorder, 0, postorder.size() - 1);
}
private:
unordered_map<int, int> postValToIdx;
TreeNode *buildTree(vector<int> &preorder, int preHead, int preTail,
vector<int> &postorder, int postHead, int postTail) {
if (preHead > preTail) {
return nullptr;
}
TreeNode *node = new TreeNode(preorder[preHead]);
if (preHead == preTail) {
return node;
}
int postLeftRoot = postValToIdx[preorder[preHead + 1]];
int leftSize = postLeftRoot - postHead + 1;
node->left = buildTree(preorder, preHead + 1, preHead + leftSize,
postorder, postHead, postLeftRoot);
node->right = buildTree(preorder, preHead + leftSize + 1, preTail,
postorder, postLeftRoot + 1, postTail - 1);
return node;
}
};
105. Construct Binary Tree from Preorder and Inorder Traversal
My Solution Solution 1: DFS (recursion) The Key Idea for Solving This Coding Question C++ Code /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right;
Jun 6, 2025MyCircularQueueO(k)
Apr 20, 2025O(m)
Mar 4, 2025O(n)n is the length of nums.
Feb 19, 2025or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up