Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
return build(begin(preorder), end(preorder), begin(inorder), end(inorder));
}
template<typename Inter>
TreeNode *build(Inter pre_first, Inter pre_end, Inter in_first, Inter in_end) {
if (pre_first == pre_end || in_first == in_end) {
return NULL;
}
TreeNode *root = new TreeNode(*pre_first);
auto inRootPos = find(in_first, in_end, *pre_first);
auto leftSize = distance(in_first, inRootPos);
root->left = build(next(pre_first), next(pre_first, leftSize+1), in_first, next(in_first, leftSize));
root->right = build(next(pre_first, leftSize+1), pre_end, next(in_first, leftSize+1), in_end);
return root;
}
};
本文介绍了一种通过前序遍历和中序遍历构建二叉树的方法。利用递归技术定位根节点,并根据中序遍历划分左右子树,最终完成整棵树的构建。
3506

被折叠的 条评论
为什么被折叠?



