已知前序序列和中序序列,构建二叉树。
解法:递归
TreeNode *build(vector& preorder, int preStart, int preEnd,
vector &inorder, int inStart, int inEnd)
{
if(preStart > preEnd || inStart > inEnd)
return NULL;
int i = inStart;
for(; i <= inEnd; ++i)
{
if(preorder[preStart] == inorder[i])
break;
}
TreeNode *p = new TreeNode(preorder[preStart]);
int leftLen = i - inStart;
p->left = build(preorder, preStart + 1, preStart + leftLen, inorder, inStart, i-1);
p->right = build(preorder, preStart + 1 + leftLen, preEnd, inorder, i+1, inEnd);
return p;
}
TreeNode* buildTree(vector& preorder, vector& inorder) {
return build(preorder, 0, preorder.size()-1, inorder, 0, inorder.size()-1);
}