Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
题意是给出二叉树的中序和后序,然后构造这个二叉树,这题和105基本是一样的思想和框架,就是区间不太一样。详细的想法看105的做法。
Code:(LeetCode运行16ms)
/**
* 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* buildTree(vector<int>& inorder, vector<int>& postorder) {
return buildTree(inorder.begin(), inorder.end(), postorder.begin(), postorder.end());
}
TreeNode* buildTree(vector<int>::iterator in_begin, vector<int>::iterator in_end, vector<int>::iterator post_begin, vector<int>::iterator post_end) {
if (in_begin == in_end) {
return NULL;
}
if (post_begin == post_end) {
return NULL;
}
auto root = new TreeNode(*prev(post_end));
auto RootPos = find(in_begin, in_end, *prev(post_end));
auto leftSize = distance(in_begin, RootPos);
auto post_leftsize = next(post_begin, leftSize);
root -> left = buildTree(in_begin, RootPos, post_begin, post_leftsize);
root -> right = buildTree(next(RootPos), in_end, post_leftsize, prev(post_end));
return root;
}
};