您的位置:首页 > 编程语言 > Java开发

java 二叉搜索树的后续遍历序列

2017-06-08 22:57 197 查看

题目

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

思路

已知条件后序序列最后一个值为root;二叉搜索树左子树值都比root小,右子树值都比root大。
1、确定root;
2、从后边遍历序列(除去root结点),找到第一个小于root的位置,则该位置左边为左子树,右边为右子树;
3、遍历左子树,若发现有大于root的值,则直接返回false;
4、分别判断左子树和右子树是否仍是二叉搜索树(即递归步骤1、2、3)。

代码

public class Main {

public boolean VerifySquenceOfBST(int [] sequence) {
int len=sequence.length;
if(len==0) return false;
if(len==1) return true;
return judge(sequence,0,len-1);
}
public boolean judge(int [] sequence,int start,int end){
if(start>end) return true;
int root;
root=sequence[end];
int i=0;
int mid=0;
for(i=end;i>=0;i--){
if(sequence[i]<root) break;
}
mid=i;
//因为mid之后的数值已经比较过了,肯定比root大,所以只需比较mid前边的数字是否比root小
for(;mid>=0;mid--){
if(sequence[mid]>root)
return false;
}
return judge(sequence,0,mid)&&judge(sequence,mid+1,end-1);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Main m=new Main();
int []sequence={7,4,6,5};
boolean temp=m.VerifySquenceOfBST(sequence);
System.out.println(temp);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: