剑指 Offer 07. 重建二叉树 - 力扣(LeetCode) (leetcode-cn.com)
题目不难,理解了二叉树的先序遍历和中序遍历之后就能很容易地写出代码。
目录
运行结果
代码
class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
return get_root(preorder, 0, preorder.size(), inorder, 0, inorder.size());
}
TreeNode* get_root(const vector<int>& preorder, int pbeg, int pend, const vector<int>& inorder, int ibeg, int iend) {
if (pbeg < pend) {
TreeNode* root = new TreeNode(preorder[pbeg]);
auto p = find(inorder.begin() + ibeg, inorder.begin() + iend, preorder[pbeg]);
int pos = distance(inorder.begin(), p);
int pmid = ++pbeg + pos - ibeg;
root->left = get_root(preorder, pbeg, pmid, inorder, ibeg, pos);
root->right = get_root(preorder, pmid, pend, inorder, pos + 1, iend);
return root;
}
return NULL;
}
};