【剑指offer】-二叉搜索树的后序遍历序列-23/67

简介: 【剑指offer】-二叉搜索树的后序遍历序列-23/67

1. 题目描述

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

2. 题目分析

  1. 题目给的是一个二叉搜索树后序遍历的数组
  2. 二叉搜索树特点:左子树
  3. 后序遍历的特点:最后一个数是根节点(root)
  4. 我们首先验证极端情况:该数组为空,返回false。我们找到数组最后一个数字,也就是根节点,找出该后序遍历序列中左右子树的交叉点
if (sequence == null || sequence.length == 0) {
      return false;
    }
    int root = sequence[sequence.length - 1];
    int i = 0;
    for (i = 0; i < sequence.length - 1; i++) {
      if (sequence[i] > root) {
        break;
      }
    }
  1. 判断右子树是否大于根节点(root)
for (j = i; j < sequence.length - 1; j++) {
      if (sequence[j] < root) {
        return false;
      }
    }
  1. 将左右子树分开,分别进行上述的操作
if (i > 0) {
      left = VerifySquenceOfBST(Arrays.copyOfRange(sequence, 0, i));
    }
if (j < sequence.length - 1) {
      right = VerifySquenceOfBST(Arrays.copyOfRange(sequence, i, sequence.length - 1));
    }
  1. 关于Arrays.copyOfRange(T[ ] original,int from,int to):将一个原始的数组original,从下标from开始复制,复制到上标to,生成一个新的数组。 注意这里包括下标from,不包括上标to

3. 题目代码

/*
   * 输入一个非空整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
   * Arrays.copyOfRange(T[ ] original,int from,int
   * to):将一个原始的数组original,从下标from开始复制,复制到上标to,生成一个新的数组。 注意这里包括下标from,不包括上标to。
   */
public boolean VerifySquenceOfBST(int[] sequence) {
    if (sequence == null || sequence.length == 0) {
      return false;
    }
    int root = sequence[sequence.length - 1];
    int i = 0;
    for (i = 0; i < sequence.length - 1; i++) {
      if (sequence[i] > root) {
        break;
      }
    }
    int j = i;
    for (j = i; j < sequence.length - 1; j++) {
      if (sequence[j] < root) {
        return false;
      }
    }
    boolean left = true;
    boolean right = true;
    if (i > 0) {
      left = VerifySquenceOfBST(Arrays.copyOfRange(sequence, 0, i - 1));
    }
    if (j < sequence.length - 1) {
      right = VerifySquenceOfBST(Arrays.copyOfRange(sequence, i, sequence.length - 1));
    }
    return (left && right);
  }


相关文章
|
设计模式 SQL Java
Spring中的设计模式
Spring中的设计模式
115 0
|
11月前
|
Shell Python
Python 的 os 库的应用实例
Python 的 os 库的应用实例
138 3
|
机器学习/深度学习 自然语言处理 算法
神经概率语言模型
神经概率语言模型
cp mv rm命令,cp 第一个是复制的文件夹,第二个表示复制去的地方,如果复制文件夹需带-r,mv test.txt Desktop/移动文件,mv test2.txt test3.txt不存
cp mv rm命令,cp 第一个是复制的文件夹,第二个表示复制去的地方,如果复制文件夹需带-r,mv test.txt Desktop/移动文件,mv test2.txt test3.txt不存
|
弹性计算 监控 Java
Serverless应用引擎SAE体验测评
在本次测评中,我将对Serverless应用引擎SAE产品进行全面评估。首先,我将结合部署游戏"Cannon Man",进行一些功能测试,以评估该产品的功能和易用性。然后,我再次体验它的极致部署。再然后,我将对其版本管理与流量分配能力进行分析。最后,我将对Serverless应用引擎SAE进行简要总结,希望能够为用户提供有用的参考信息。通过本次测评,我希望能够全面了解Serverless应用引擎SAE的特点,并为用户提供更好的决策支持。
78307 7
|
运维 Dubbo Java
《快递行业云上技术服务白皮书》——4. 快递行业技术服务最佳实践——4.1 核心业务上云最佳实践——4.1.3 业务迁移上云最佳实践(1)
《快递行业云上技术服务白皮书》——4. 快递行业技术服务最佳实践——4.1 核心业务上云最佳实践——4.1.3 业务迁移上云最佳实践(1)
302 0
|
新零售 安全 双11
2020双12上云攻略:云通信年终钜惠,官网省钱秘籍来了!
短信服务新用户低至7.2折,会员专享优惠9折起;语音服务低至8.5折,号码认证服务全线9折,惠不可失!!
600 0
2020双12上云攻略:云通信年终钜惠,官网省钱秘籍来了!

热门文章

最新文章