【树】leetcode_106_从后序与中序遍历序列构造二叉树
class Solution {
public:
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
return traversal(inorder,postorder);
}
TreeNode* traversal(vector<int>& inorder, vector<int>& postorder){
if(inorder.empty() || postorder.empty()){
return nullptr;
}
int root_val = *postorder.rbegin();
TreeNode *root = new TreeNode(root_val);
if (postorder.size() == 1) return root;
postorder.pop_back();
int index;
for(index = 0; index<inorder.size(); index++){
if (inorder[index] == root_val){
break;
}
}
vector<int> mid_left (inorder.begin(), inorder.begin()+index);
vector<int> mid_right (inorder.begin()+index+1, inorder.end());
int left_size = mid_left.size();
int right_size = mid_right.size();
vector<int> later_left (postorder.begin(), postorder.begin()+left_size);
vector<int> later_right (postorder.begin()+left_size, postorder.end());
root->left = traversal(mid_left, later_left);
root->right = traversal(mid_right, later_right);
return root;
}
};