二叉搜索树:二叉搜索树根节点的左边都比根节点小,右边都比根节点大。
例题:输入一个数组,判断是否为二叉搜索树的后序遍历序列,如果是,返回true,如果不是,返回flase,假设没有重复的元素。
思路:由于是后序遍历,所以数组的最后一个节点是根节点,而且,由于是二叉收索树,所以,前面的数据被分为两部分,右边部分比根节点小,左边比根节点大。左右两边又分别为二叉收索树,因此可以用递归来实现。
Java代码:
public class IsBinarySearchTree { public boolean isBST(int[] sequence,int start,int len){ if(sequence==null||len<=0) return false; int root=sequence[len-1]; //二叉搜索树的左边都小于根节点,右边都大于根节点。 int i=0; while(i<len-1){ if(sequence[i]>root) break; i++; } int j=i; while(j<len-1){ if(sequence[j]<root) return false; j++; } //判断左子树是不是二叉搜索树 boolean left=true; if(i>0) left=isBST(sequence,0,i); //判断右子树是不是二叉搜索树 boolean right=true; if(i<len-1) right=isBST(sequence,i,len-i-1); return left&&right; } public static void main(String[] args) { int[] a={3,5,6}; IsBinarySearchTree ibt=new IsBinarySearchTree(); if(ibt.isBST(a, 0, a.length)){ System.out.println("is BinarySearchTree endRoot"); } else System.out.println("is not BinarySearchTree endRoot"); } }