《剑指Offer》24题:
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同
bool verifyLRD(int * arrays,int start,int end) { //条件检测 if (arrays==NULL ||start<0||end<0||start>end) { return false; } //递归终止条件 if (start == end) { return true; } //将最后一个节点作为根节点 int rootData = arrays[end]; int i = start; //找到分界节点 while (i<end) { if (arrays[i]>=rootData) break; i++; } //若右子树中出现小于根节点的节点,返回false int j = i; while (j<end) { if (arrays[j]<rootData) { return false; } j++; } bool left=true,right=true; if (start<=i-1)//容易忽略 { left = verifyLRD(arrays,start,i-1); } if (i<=end-1)//容易忽略 { right = verifyLRD(arrays,i,end-1); } return left&&right; }