剑指Offer-Java-二叉搜索树的后序遍历序列

简介: 剑指Offer-Java-二叉搜索树的后序遍历序列

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


题目:


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


代码:

package com.sjsq.test;
/**
 * @author shuijianshiqing
 * @date 2020/5/25 21:26
 */
/**
 * 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历
 * 的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意
 * 两个数字都互不相同。
 */
public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        // 为空时为true
        if(sequence == null || sequence.length == 0){
            return false;
        }
        return helqVerifty(sequence,0,sequence.length-1);
    }
    public boolean helqVerifty(int seq[],int start,int end){
        if(start >= end){
            return true;
        }
        int key = seq[end];
        int i;
        // 找到左右子树的分界点
        for(i = start; i < end; i++){
            if(seq[i] > key){
                break;
            }
        }
        // 判断从右子树有有没有比key小的,如果有则返回false
        for(int j = i; j < end; j++){
            if(seq[j] < key){
                return false;
            }
        }
        // 判断左子树和右子树是否符合
        return helqVerifty(seq,start,i-1) && helqVerifty(seq,i,end-1);
    }
}
相关文章
|
4天前
|
Java
Tree Traversals Again(Java语言)(先序和中序创建二叉树)(遍历树)
Tree Traversals Again(Java语言)(先序和中序创建二叉树)(遍历树)
12 4
|
4天前
|
算法 Java
【Java高阶数据结构】图-图的表示与遍历(下)
【Java高阶数据结构】图-图的表示与遍历
13 1
|
4天前
|
机器学习/深度学习 存储 Java
【Java高阶数据结构】图-图的表示与遍历(上)
【Java高阶数据结构】图-图的表示与遍历
10 2
|
4天前
|
Java 数据库
JAVA8遍历tree
JAVA8遍历tree
|
4天前
|
存储 安全 Java
Java一分钟之-数组的创建与遍历
【5月更文挑战第8天】本文介绍了Java中数组的基本概念、创建与遍历方法,强调了类型匹配和数组越界问题。示例展示了如何创建整数数组并初始化元素,同时提供了避免数组越界的策略。对于遍历,文章提到了for循环和增强型for循环,并给出了防止错误的建议,如正确声明类型、初始化数组、安全索引操作及使用合适的数据结构。遵循这些指导可帮助开发者有效管理Java数组并减少错误。
19 0
|
2天前
|
缓存 安全 Java
7张图带你轻松理解Java 线程安全,java缓存机制面试
7张图带你轻松理解Java 线程安全,java缓存机制面试
|
21小时前
|
Java
深入理解Java并发编程:线程池的应用与优化
【5月更文挑战第18天】本文将深入探讨Java并发编程中的重要概念——线程池。我们将了解线程池的基本概念,应用场景,以及如何优化线程池的性能。通过实例分析,我们将看到线程池如何提高系统性能,减少资源消耗,并提高系统的响应速度。
10 5
|
1天前
|
消息中间件 安全 Java
理解Java中的多线程编程
【5月更文挑战第18天】本文介绍了Java中的多线程编程,包括线程和多线程的基本概念。Java通过继承Thread类或实现Runnable接口来创建线程,此外还支持使用线程池(如ExecutorService和Executors)进行更高效的管理。多线程编程需要注意线程安全、性能优化和线程间通信,以避免数据竞争、死锁等问题,并确保程序高效运行。
|
1天前
|
存储 Java
【Java】实现一个简单的线程池
,如果被消耗完了就说明在规定时间内获取不到任务,直接return结束线程。
8 0