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);
}
}
相关文章推荐
- 二叉搜索树的后续遍历序列
- 剑指offer--面试题24:二叉搜索树的后序遍历序列--Java实现
- 剑指Offer 24题 二叉搜索树的后序遍历序列 Java
- 判断一个序列是否为某二叉搜索树的后续遍历结果
- 剑指Offer--二叉搜索树的后续遍历序列
- 剑指offer解题报告(Java版)——判断一个数组是否是二叉搜索树的后序遍历序列 24
- 剑指offer 二叉搜索树后续遍历序列 判断
- 二叉搜索树的后续遍历序列
- 二叉搜索树的后续遍历序列
- 二叉搜索树的后续遍历序列
- 二叉搜索树的后续遍历序列
- 剑指offer系列之二十二:二叉搜索树的后续遍历序列
- 二叉搜索树的后续遍历序列
- 数据结构与算法分析笔记与总结(java实现)--二叉树20:二叉搜索树的后序遍历序列
- 剑指offer 4.3 举例形象化问题4-二叉搜索树的后续遍历序列
- java之二叉搜索树的后序遍历序列
- 剑指offer——面试题24:二叉搜索树的后续遍历序列
- 剑指offer:二叉搜索树的后序遍历序列(判断一个数组是否是二叉搜索树的后续遍历序列)
- 判断数组是否是二叉搜索树的后序遍历序列 JAVA实现
- 二叉搜索树的后续遍历序列