题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是,返回true,否则返回false。假设输入的数组任意两个数字都互不相同。
解题思路:涉及到二叉树的问题,一般可以这样处理:找到根结点,把该树拆分成左、右子树,继续处理子树,这就变成了一个递归的过程。本题感觉不存在高深的算法,那么可以归结为找规律题,画些草图,不难发现序列的最后一个点即为树的根节点。
bool judge(int a[],int len) { if(a==nuLL||len<=0) return false; int i; for(i=0;i<len-1&&a[i]<a[len-1];i++) ; int j; for(j=i;j<len-1;j++) { if(a[j]<a[len-1]) return false; } bool left=true; if(i>0) left=judge(a,i); bool right=true; if(i<len-1) right=judge(a+i,len-i-1); return (left&&right); }