所有代码均通过G++编译器测试,仅为练手纪录。
//面试题24:二叉搜索树的后序遍历序列
//题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后续遍历的结果。
// 如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
//面试题24:二叉搜索树的后序遍历序列
//题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后续遍历的结果。
// 如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
bool TreeVerifyByOrder(int *pPostOrder,int nSize)
{
if(NULL == pPostOrder || nSize <= 0)
{
return false;
}
int nRootValue = pPostOrder[nSize-1];
int nBegRightPos = 0;
while (nBegRightPos < nSize -1)
{
if (pPostOrder[nBegRightPos] > nRootValue)
{
break;
}
++nBegRightPos;
}
for(int i = nBegRightPos;i< nSize-1;++i)
{
if(pPostOrder[i] < nRootValue)
{
return false;
}
}
bool bLeft = true;
bool bRight = true;
if(nBegRightPos > 0)
{
bLeft = TreeVerifyByOrder(pPostOrder, nBegRightPos);
}
if(nBegRightPos < nSize-1)
{
bRight = TreeVerifyByOrder(pPostOrder+nBegRightPos, nSize-nBegRightPos-1);
}
return bLeft && bRight;
}
void TestTreeVerifyByOrder()
{
//int arrVal[] = {5,7,6,9,11,10,8};
int arrVal[] = {7,4,6,5};
LogInfo("TreeVerifyByOrder:%d",TreeVerifyByOrder(arrVal,sizeof(arrVal)/sizeof(int)));
}
ZhaiPillary
2016-12-25