Try   HackMD

889. Construct Binary Tree from Preorder and Postorder Traversal


My Solution

The Key Idea for Solving This Coding Question

C++ Code

/** * 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; } };

Time Complexity

Space Complexity

Miscellaneous

105. Construct Binary Tree from Preorder and Inorder Traversal