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

来源:互联网 发布:类似sai mac 编辑:程序博客网 时间:2024/05/21 18:49

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回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;}


原创粉丝点击