题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。
如果是返回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 snode(int *a,int legth) { if (a==nullptr||legth<=0) { return false; } int root=*(a+legth-1); int i=0; for (;i<legth-1;++i) { if (*(a+i)>root) { break; } } int j=0; for (j=i;j<legth-1;++j) { if (*(a+j)<root) { return false; } } bool left=true; if (i>0) { left=snode(a,i); } if(i < legth - 1) { bool right=snode(a+i,legth-i-1); } return (left&&right); } int main() { int a[]={5,7,6,9,11,10,8}; bool s=true; s=snode(a,sizeof(a)/sizeof(int)); if (s==true) { cout<<"yes"<<endl; } else { cout<<"no"<<endl; } }