欢迎访问我的剑指offer(第二版)题解目录哦
对应的leetcode题目可点击leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal。
题目描述
Given preorder and inorder traversal of a tree, construct the binary tree.
算法设计
先根遍历是按照“中左右”顺序,中根遍历是按照“左中右”顺序。可以根据先根序列确定根结点,根据中根序列确定左子树和右子树,递归处理左右子树即可。
C++代码
/**
* 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* f(vector<int>& pre, vector<int>& in, int root, int left, int right) {
if (left > right)
return nullptr;
int i = find(in.begin(), in.end(), pre[root]) - in.begin();
auto r = new TreeNode(pre[root]);
r->left = f(pre, in, root + 1, left, i - 1);
r->right = f(pre, in, root + 1 + i - left, i + 1, right);
return r;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
return f(preorder, inorder, 0, 0, inorder.size() - 1);
}
};