leetcode 105 从前序与中序遍历序列构造二叉树
思路
- 根据前序序列,可以划分中序左右树两个子序列。
- 根据中序左右两个子序列,可以划分前序左右树两个子序列。
- 递归两个子集,建立二叉树。
class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
if(preorder.empty() || inorder.empty()) return nullptr;
TreeNode *root = new TreeNode(*preorder.begin());
auto it = find(inorder.begin(), inorder.end(), *preorder.begin());
vector<int> iLeft(inorder.begin(), it), iRight(it+1, inorder.end());
vector<int> pLeft(preorder.begin() + 1, preorder.begin() + 1 + iLeft.size()), pRight(preorder.begin() + 1 + iLeft.size(), preorder.end());
root->left = buildTree(pLeft, iLeft);
root->right = buildTree(pRight, iRight);
return root;
}
};