• 剑指offer解题报告(Java版)——判断一个数组是否是二叉搜索树的后序遍历序列 24


    引言

       

    继续二叉树,这个题考的知识点是二叉树的后续遍历

       

    分析问题

       

    对于一个二叉树的后序遍历序列来说,最后一个数一定是根节点,然后前面的数中,从最开始到第一个大于根节点的数都是左子树中的数,而后面到倒数第二个数应该都是大于根节点的,是右子树,如果后面的数中有小于根节点的,那么说明这个序列不是二叉搜索树的后序遍历序列

       

    解决问题

       

    同样是用递归去做,首先要考虑Corner Case,如果array为空,那么返回false

       

    然后找到根节点,根节点是array最后一个数,从0开始找,找到第一个大于root的数

       

    那么0i-1的值就是左子树中的数

       

    然后从iarray.length-2遍历,如果有小于root的数,那么这个序列肯定不是后序遍历序列

    如果没有,那么iarray.length-2就是右子树中的数

       

    那么就去看左子树中的子序列和右子树中的那些子序列是否满足条件

       

    注意这里需要用到数组的复制函数,不然会出问题

       

    public boolean verifySequenceOfBST(int[] array)

    {

    if(array==null || array.length<=0)

    return false;

    int root=array[array.length-1];

    int i=0;

    for(;i<array.length-1;++i)

    {

    if(array[i]>root)

    {

    break;

    }

    }

    int j=i;

    for (;j < array.length-1; ++j) {

    if (array[j]<root) {

    return false;

    }

    }

    boolean leftFlag=true;

    if (i>0) {

    leftFlag=verifySequenceOfBST(Arrays.copyOfRange(array,0,i));

    }

    boolean rightFlag=true;

    if (i<array.length-1) {

    rightFlag=verifySequenceOfBST(Arrays.copyOfRange(array,i,array.length-1));

    }

    return leftFlag&&rightFlag;

  • 相关阅读:
    TSQL与PL/SQL的比较
    春天预防生病
    PyG(pytorchgeometric)安装
    TensorFlow 安装与环境配置(anaconda下)
    古诗今语
    多标签分类和多分类
    RequestsDependencyWarning: urllib3 (1.26.7) or chardet (2.3.0)/charset_normalizer (2.0.4) doesn't match a supported version!
    Anacoda 安装pytorch
    所有的业务系统都是在做数据的维护和读取
    解决ORA04091行触发器中访问变异表的难题
  • 原文地址:https://www.cnblogs.com/keedor/p/4467963.html
Copyright © 2020-2023  润新知