Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
For example, given
inorder = [9,3,15,20,7] postorder = [9,15,7,20,3]
Return the following binary tree:
3 / \ 9 20 / \ 15 7
思路:
同上一题一样,使用递归的方式解题。
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
int len = inorder.size();
if (len == 0) return NULL;
int val = postorder[len - 1];
int right = len - 1;
while (inorder[right] != val) right--;
TreeNode *root = new TreeNode(val);
vector<int> inorderLeft(inorder.begin(), inorder.begin() + right);
vector<int> postorderLeft(postorder.begin(), postorder.begin() + right);
root->left = buildTree(inorderLeft, postorderLeft);
vector<int> inorderRight(inorder.begin() + right+1, inorder.end());
vector<int> postorderRight(postorder.begin() + right, postorder.end() - 1);
root->right = buildTree(inorderRight, postorderRight);
return root;
}