题目:
Given inorder and postorder traversal of a tree, construct the binary tree.
代码如下:
TreeNode *build(vector<int>&postorder,int m_beginp,int m_endp,vector<int> &inorder,int m_begini,int m_endi)
{
if(m_endp-m_beginp!=m_endi-m_begini)return NULL;
if(m_endp<m_beginp)return NULL;
TreeNode *root=new TreeNode(postorder[m_endp]);
root->left=NULL;
root->right=NULL;
int i;
for(i=m_begini;i<=m_endi;i++)
{
if(postorder[m_endp]==inorder[i])
{
break;
}
}
if(i>m_endi)return NULL;
if(i-m_begini>0)
root->left=build(postorder,m_beginp,m_beginp+i-m_begini-1,inorder,m_begini,i-1);
if(i<m_endi)
root->right=build(postorder,m_beginp+i-m_begini,m_endp-1,inorder,i+1,m_endi);
return root;
}
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder)
{
return build(postorder,0,postorder.size()-1,inorder,0,inorder.size()-1);
}