所有代码均通过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
本文介绍了一个算法,用于判断一个整数数组是否为某个二叉搜索树的后序遍历结果。该算法首先找到根节点,然后检查数组中所有元素的位置是否符合二叉搜索树的特性,并递归地验证左右子树。
548

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



