您的位置:首页 > 职场人生

[剑指offer][面试题24]二叉搜索树的后序遍历序列

2013-10-16 12:49 549 查看
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。例如输入数组{5,7,6,9,11,10,8},则返回true,如果输入的数组是{7,4,6,5},则返回false。

#include <iostream>
#include <stack>
using namespace std;

bool isPostOrderOfBST(int *pOrder, int iLength)
{
if (pOrder==NULL){
return false;
}

int iValRoot = pOrder[iLength-1];
int iLenLeft = -1;
int iLenRight= -1;

while (pOrder[iLenLeft+1]<iValRoot){
iLenLeft++;
}
iLenLeft++;
iLenRight = iLength-1-iLenLeft;

for (int i=iLenLeft; i<iLength; i++){
if (pOrder[i]<iValRoot-1){
return false;
}
}

if (iLenLeft==0 && iLenRight==0){
return true;
}
else if(iLenLeft==0 || iLenRight==0){
return isPostOrderOfBST(pOrder, iLength-1);
}
else{
return isPostOrderOfBST(pOrder, iLenLeft) && isPostOrderOfBST(pOrder+iLenLeft, iLenRight);
}
}

int main()
{
int pPostOrder0[] = {5,7,6,9,11,10,8};
int pPostOrder1[] = {5,7,9,6,11,10,8};

cout<<isPostOrderOfBST(pPostOrder0, 7)<<endl;
cout<<isPostOrderOfBST(pPostOrder1, 7)<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: