根据一棵树的中序遍历与后序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3]
返回如下的二叉树:
3 / \ 9 20 / \ 15 7
/**
* 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) {
if(!postorder.size()) return NULL;
int middle = postorder[postorder.size()-1];
vector<int> postleft;
vector<int> postright;
vector<int> inleft;
vector<int> inright;
int i, j;
i = j = 0;
for(;i < inorder.size();i++){
if(inorder[i] != middle) inleft.push_back(inorder[i]);
else break;
}
i++;
for(;i < inorder.size();i++){
inright.push_back(inorder[i]);
}
for(;j < inleft.size();j++){
postleft.push_back(postorder[j]);
}
for(;j < postorder.size()-1;j++){
postright.push_back(postorder[j]);
}
TreeNode* T = new TreeNode(middle);
T->left = buildTree(inleft, postleft);
T->right = buildTree(inright, postright);
return T;
}
};