Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
Subscribe to see which companies asked this question
Show Similar Problems
/** * 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* build(vector<int>& preorder, vector<int>& inorder, int pre_begin, int pre_end, int in_begin, int in_end) { TreeNode* root = NULL; if (pre_begin > pre_end || in_begin > in_end) { return root; } root = new TreeNode(preorder[pre_begin]); int i; for (i=in_begin; i<=in_end && inorder[i] != preorder[pre_begin]; i++); TreeNode* left = build(preorder, inorder, pre_begin + 1, pre_begin + i - in_begin, in_begin, i - 1); TreeNode* right = build(preorder, inorder, pre_begin + i - in_begin + 1, pre_end, i + 1, in_end); root->left = left; root->right = right; return root; } TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { return build(preorder, inorder, 0, preorder.size()-1, 0, inorder.size()-1); } };