Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
// construct tree from preorder and inorder
class Solution {
public:
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
if(preorder.size() == 0) return NULL;
return buildTree(preorder, 0, inorder, 0, preorder.size());
}
TreeNode *buildTree(vector<int> &pre, int preStart, vector<int> &in, int inStart, int len) {
if(preStart < 0 || preStart + len > pre.size() || inStart < 0 || inStart + len > in.size() || len < 1) {
return NULL;
}
int rootVal = pre[preStart];
int i = 0;
while(in[i] != rootVal) ++i;
TreeNode *root = new TreeNode(rootVal);
int leftLen = i - inStart;
int rightLen = len - leftLen - 1;
root->left = buildTree(pre, preStart+1, in, inStart, leftLen);
root->right = buildTree(pre, preStart+leftLen+1, in, i+1, rightLen);
return root;
}
};
欢迎关注微信公众号——计算机视觉: