有了先序中序建二叉树,这题也是多余的。
TreeNode *generateOneTree(vector<int> &midOrder,int midFrom,int midEnd,vector<int> &postOrder,int postFrom,int postEnd)
{
TreeNode *p=NULL;
if(midFrom>midEnd||postFrom>postEnd)
return p;
if(postFrom==postEnd)
{
p = new TreeNode(postOrder[postEnd]);
return p;
}
int midPos=midFrom;
while(midOrder[midPos]!=postOrder[postEnd])
midPos++;
p = new TreeNode(postOrder[postEnd]);
p->left = generateOneTree(midOrder,midFrom,midPos - 1,postOrder,postFrom,postFrom + midPos - midFrom - 1);
p->right = generateOneTree(midOrder,midPos + 1,midEnd,postOrder,postFrom + midPos - midFrom,postEnd - 1);
return p;
}
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
int lenMid = inorder.size();
int lenPost = postorder.size();
if(lenPost!=lenMid)
return NULL;
return generateOneTree(inorder,0,lenMid-1,postorder,0,lenPost-1);
}

771

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



