这是一道面试题,解题的代码如下(我这里把有重复节点的序列排除了,这里的二叉树不允许有相同值得节点):
bool JudgeListIsBSTreePostOrder(int* iArray, int nLeft, int nRight)
{
if (nLeft == nRight)
{
return true;
}
int nMidValue = iArray[nRight];
int nSubLeft = nLeft;
int nSubRight = nRight;
for (int i = nLeft; i < nRight; i++)
{
if (iArray[i] > nMidValue)
{
nSubRight = i;
break;
}
else if(iArray[i] == nMidValue)
{
return false;
}
}
if (nSubRight > nSubLeft)
{
if (JudgeListIsBSTreePostOrder(iArray, nSubLeft, nSubRight-1) == false)
{
return false;
}
}
//如果到尾部了,则无需检查右子树了
if (nSubRight == nRight)
{
return true;
}
nSubLeft = nSubRight;
nSubRight = nRight-1;
for (int i = nSubLeft; i < nRight; i++)
{
if (iArray[i] <= nMidValue)
{
return false;
}
}
return JudgeListIsBSTreePostOrder(iArray, nSubLeft, nSubRight);
}