Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
/**
* Definition for binary tree
* 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) {
if(inorder.size() != postorder.size()) return NULL;
int n = inorder.size();
return build(inorder, 0, postorder, n-1, n);
}
TreeNode *build(vector<int> &io, int inStart, vector<int> &po, int postEnd, int len) {
if(inStart < 0 || inStart + len > io.size() || postEnd >= po.size() || postEnd - len < -1 || len < 1) {
return NULL;
}
int rootVal = po[postEnd];
int i = inStart;
while(io[i] != rootVal) ++i;
TreeNode *root = new TreeNode(rootVal);
int leftLen = i - inStart;
int rightLen = len - leftLen - 1;
root->right = build(io, i+1, po, postEnd - 1, rightLen);
root->left = build(io, inStart, po, postEnd - rightLen - 1, leftLen);
return root;
}
};
欢迎关注微信公众号——计算机视觉: