题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是返回true,否则返回false。 假设输入的数组任意两个数字都不相同

解题思路:二叉搜索树的特点是根节点的左子树的值小于等于根节点的值,右子树的结点的值大于等于根节点的值。

在二叉树的后序遍历序列中,最后一个数字是树的根节点。

根据二叉搜索树的后序遍历特点,序列的前半部分是左子树结点的值,他们都比根的值小;后半部分是右子树结点的值,他们都比根的值大。

举一反三:要求处理一颗二叉树的遍历序列,可以先找到二叉树的根节点,在基于根节点把整棵树的遍历序列拆分成左子树对应的序列和右子树对应的序列,接下来再递归的处理这两个子序列。

package Solution;

public class No24SequenceOfBinarySearchTree {

    public static void main(String[] args) {
int[] array1 = { 5, 7, 6, 9, 11, 10, 8 };
System.out.println(verifySequenceOfBinarySearchTree(array1, 0,
array1.length - 1));
int[] array2 = { 7, 1, 6, 5 };
System.out.println(verifySequenceOfBinarySearchTree(array2, 0,
array2.length - 1)); } public static boolean verifySequenceOfBinarySearchTree(int[] array,
int start, int end) {
if (array == null || start > end || start < 0 || end < 0)
return false;
if (start == end)
return true;
int root = array[end];
int i = start;
for (; i < end; i++) {
if (array[i] > root)
break;
}
int j = i;
for (; j <= end; j++) {
if (array[j] < root)
return false;
}
// 递归判断左子树是不是二叉搜索树
boolean left = false;
if (i > start) {
left = verifySequenceOfBinarySearchTree(array, start, i - 1);
}
// 递归判断右子树是不是二叉搜索树
boolean right = false;
if (i < end) {
right = verifySequenceOfBinarySearchTree(array, i, end - 1);
}
return left && right;
}
}

剑指offer面试题24:二叉搜索树的后序遍历序列的更多相关文章

  1. 剑指Offer:面试题24——二叉搜索树的后序遍历序列(java实现)

    问题描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false.假设输入的数组的任意两个数字都互不相同. 思路: 1.首先后序遍历的结果是[(左子 ...

  2. 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列

    剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...

  3. 剑指offer(23)二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 题目分析 1.后续遍历我们可以知道,最右边的是根节 ...

  4. 【剑指Offer】23、二叉搜索树的后序遍历序列

      题目描述:   输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同.   解题思路:   对于后续遍历序列,序 ...

  5. 《剑指offer》面试题24 二叉搜索树的后序遍历序列 Java版

    (判断一个元素均不相同的序列是否为一个BST的LRD) 书中方法:首先对于二叉搜索树,左子树中的所有元素小于根节点小于右子树中的所有元素,然后后序遍历序列最后一个元素是根节点,这是我们已知的条件.这道 ...

  6. 《剑指offer》面试题33. 二叉搜索树的后序遍历序列

    问题描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同.   参考以下这颗二叉搜索树: 5 / \ ...

  7. 【Offer】[33] 【二叉搜索树的后序遍历序列】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回true, 否则返回false. 假设输入的数组的任意两个数字 ...

  8. 剑指 Offer 33. 二叉搜索树的后序遍历序列 + 根据二叉树的后序遍历序列判断对应的二叉树是否存在

    剑指 Offer 33. 二叉搜索树的后序遍历序列 Offer_33 题目详情 题解分析 本题需要注意的是,这是基于一颗二叉排序树的题目,根据排序二叉树的定义,中序遍历序列就是数据从小到大的排序序列. ...

  9. (剑指Offer)面试题24:二叉搜索树的后序遍历序列

    题目: 输入一个整数数组,判断该数组是不是某个二叉搜索树的后序遍历的结果,如果是则返回true,否则返回false. 假设输入的数组的任意两个数字都互不相同. 思路: 根据二叉搜索树的后序遍历特点,很 ...

  10. 剑指Offer面试题:22.二叉搜索树的后序遍历序列

    一.题目:二叉搜索树的后序遍历序列 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false.假设输入的数组的任意两个数字都互不相同. 例如在下面 ...

随机推荐

  1. 21-matlab 迷宫题

    dfs: 注意matlab里面的全局变量的使用 test.m: clc; clear; global A ii dx dy vis minpath path A=... [1 1 1 1 1 1 1 ...

  2. Python:a,*args,**kwargs的理解

    1.何时用这些参数? 在任何时候继承类和重写方法时,应当用到’*args’和’**kwargs’将接收到的位置参数和键值参数给父类方法 . 2.一句话清晰说明: a是常规的变量类型,比如int,str ...

  3. ServletConfig、ServletContext 的应用

    一.ServletConfig对象及其应用(用的不多) 1. Context和ContextPath:一个web工程,若名为JavaWeb,访问的路径为:http://localhost:8080/J ...

  4. Linux内核基本装载卸载

    Linux由两部分组成:内核核心+内核模块核心的命名通常是vmlinuz-VERSION-release,模块的放置于/lib/modules/VERSION-release/ 一旦系统运行起来,内核 ...

  5. STS中springmvc.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  6. C#事务提交

    using (System.Transactions.TransactionScope transcope = new System.Transactions.TransactionScope()) ...

  7. 如何判断Linux是32位还是64位

    getconf LONG_BIT

  8. Unity - Photon PUN 本地与网络同步的逻辑分离 (一)

    服务器大家可以使用Photon官网提供的,这样会变得很简单,直接搭建下就好.或者下载到本地开启本地端Photon服务器 (大家也可以使用和我一样方式有时间做了个winform 程序用来管理本地服务器开 ...

  9. pl/sql调试存储过程

    1.找到对应的存储过程 2.在存储过程名称上右键,选择Test 3.点击1标识的按钮(begin debugger),选择2开始调试 4.存储过程如需参数,需要在右侧下方的表格区域(3)填入对应的值即 ...

  10. C#动态设置webServer路径

    using BD.SD_BJXYZY_PRO.WsbxService;using System;using System.Collections.Generic;using System.Linq;u ...