【树】leetcode_105_从前序与中序遍历序列构造二叉树
class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
return traversal(inorder, preorder);
}
TreeNode* traversal(vector<int>& inorder, vector<int>& preorder){
if(inorder.empty() || preorder.empty()){
return nullptr;
}
int root_val = *preorder.begin();
TreeNode *root = new TreeNode(root_val);
if (preorder.size() == 1) return root;
preorder.erase(preorder.begin());
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 (preorder.begin(), preorder.begin()+left_size);
vector<int> later_right (preorder.begin()+left_size, preorder.end());
root->left = traversal(mid_left, later_left);
root->right = traversal(mid_right, later_right);
return root;
}
};