[剑指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; }
相关文章推荐
- 【剑指offer】面试题24:二叉搜索树的后序遍历序列
- 剑指Offer----面试题24:二叉搜索树的后序遍历序列
- 【剑指offer】4.3举例让抽象问题具体化——面试题24:二叉搜索树的后序遍历序列
- 【剑指Offer学习】【面试题24:二叉搜索树的后序遍历序列】
- 剑指offer——面试题24:二叉搜索树的后序遍历序列
- 剑指offer 面试题24—二叉搜索树的后序遍历序列
- 剑指offer面试题24:二叉搜索树的后序遍历序列
- 剑指offer代码解析——面试题24二叉搜索树的后序遍历序列
- 剑指offer代码解析——面试题24二叉搜索树的后序遍历序列
- 剑指offer-面试题24:二叉搜索树的后序遍历序列
- 剑指offer 面试题24 二叉搜索树的后序遍历序列
- 剑指offer--面试题24: 二叉搜索树的后序遍历序列
- 剑指offer-面试题24-二叉搜索树的后序遍历序列
- 剑指offer面试题24:二叉搜索树的后序遍历序列
- 剑指offer面试题24-二叉搜索树的后序遍历序列
- 剑指offer之面试题24:二叉搜索树的后序遍历序列
- 剑指offer面试题24:二叉搜索树的后序遍历序列
- 剑指offer-面试题24 二叉搜索树的后序遍历序列
- 【剑指Offer面试题】 九度OJ1367:二叉搜索树的后序遍历序列
- 【剑指Offer】面试题24:二叉搜索树的后续遍历序列