【练习】判断整数序列是不是二元查找树的后序遍历结果
/************************************************************************/ /* 判断整数序列是不是二元查找树的后序遍历结果 题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。 如果是返回true,否则返回false。 例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11 因此返回true。 如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。 思路:后序遍历结果数组的最后一个元素为根节点。 根节点的左子树全部小于根节点 根节点的右子树全部大于根节点 递归遍历左右子树是否二叉树 */ /************************************************************************/ #include <iostream> using namespace std; bool isResultOfBST(int* array,int length); int main() { int array[7]={5,7,6,9,11,10,8}; if (isResultOfBST(array,7)) { cout<<"yes"<<endl; } else { cout<<"no"<<endl; } } bool isResultOfBST(int* array,int length) { if (array==NULL||length==0) { return false; } bool result=true; int root=array[length-1]; int i=0; for (;i<length-1;i++) { if (array[i]>root) { break; } } int j=i;//根节点左右子树分界点 for (;j<length-1;j++) { if (array[j]<root) { return false; } } //递归遍历 bool lReult=true,rResult=true; if (i>0) { lReult=isResultOfBST(array,i); } if (i<length-1) { rResult=isResultOfBST(array+i,length-i-1); } return (lReult&&rResult); }