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

测试用例:
1)功能测试(输入的后序遍历的序列对应一棵二叉树,包括完全二叉树,所有结点都没有左/右子树的二叉树、只有一个结点的二叉树;输入的后续遍历的序列没有对应一棵二叉树);
2)特殊输入测试(指向后序遍历序列的指针为null指针)。
 
代码实现:
package com.yyq;
import java.util.Arrays;
/**
* Created by Administrator on 2015/9/20.
*/
public class SequenceOfBST {
public static boolean verifySquenceOfBST(int sequence[], int length){
if (sequence == null || length <= 0)
return false;
int root = sequence[length-1];
//在二叉搜索树中左子树的结点小于根结点
int i = 0;
for (;i < length-1; i++){
if (sequence[i] > root)
break;
}
//在二叉搜索树中右子树的结点大于根节点
int j = i;
for (; j < length-1; j++){
if (sequence[j] < root)
return false;
}
//判断左子树是不是二叉搜索树
boolean left = true;
if (i > 0)
left = verifySquenceOfBST(sequence,i);
//判断右子树是不是二叉搜索树
boolean right = true;
if (i < length-1) {
int[] temp = Arrays.copyOfRange(sequence, i, length-1);
right = verifySquenceOfBST(temp, length-i-1);
}
return (left && right);
}
// ====================测试代码====================
public static void Test(String testName, int sequence[], int length, boolean expected)
{
if(testName != null)
System.out.println(testName+" begins: " );
if(verifySquenceOfBST(sequence, length) == expected)
System.out.println("passed.");
else
System.out.println("failed.");
}
// 10
// / \
// 6 14
// /\ /\
// 4 8 12 16
public static void Test1()
{
int data[] = {4, 8, 6, 12, 16, 14, 10};
Test("Test1", data, data.length, true);
}
// 5
// / \
// 4 7
// /
// 6
public static void Test2()
{
int data[] = {4, 6, 7, 5};
Test("Test2", data, data.length, true);
}
// 5
// /
// 4
// /
// 3
// /
// 2
// /
//
public static void Test3()
{
int data[] = {1, 2, 3, 4, 5};
Test("Test3", data, data.length, true);
}
// 1
// \
// 2
// \
// 3
// \
// 4
// \
//
public static void Test4()
{
int data[] = {5, 4, 3, 2, 1};
Test("Test4", data, data.length, true);
}
// 树中只有1个结点
public static void Test5()
{
int data[] = {5};
Test("Test5", data, data.length, true);
}
public static void Test6()
{
int data[] = {7, 4, 6, 5};
Test("Test6", data, data.length, false);
}
public static void Test7()
{
int data[] = {4, 6, 12, 8, 16, 14, 10};
Test("Test7", data, data.length, false);
}
public static void Test8()
{
Test("Test8", null, 0, false);
}
public static void main(String[] args)
{
Test1();
Test2();
Test3();
Test4();
Test5();
Test6();
Test7();
Test8();
}
}
 
结果输出:
Test1 begins: 
passed.
Test2 begins: 
passed.
Test3 begins: 
passed.
Test4 begins: 
passed.
Test5 begins: 
passed.
Test6 begins: 
passed.
Test7 begins: 
passed.
Test8 begins: 
passed.

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

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

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

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

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

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

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

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

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

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

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

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

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

  7. 剑指offer-第四章解决面试题思路(判断一个数组是否为二叉搜索树的后序遍历序列)

    二叉搜索树:二叉搜索树根节点的左边都比根节点小,右边都比根节点大. 例题:输入一个数组,判断是否为二叉搜索树的后序遍历序列,如果是,返回true,如果不是,返回flase,假设没有重复的元素. 思路: ...

  8. 《剑指offer》第三十三题(二叉搜索树的后序遍历序列)

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

  9. 《剑指offer》二叉搜索树的后序遍历序列

    本题来自<剑指offer> 二叉搜索树的后序遍历序列 题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字 ...

  10. [PHP]算法- 判断是否为二叉搜索树的后序遍历序列的PHP实现

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

随机推荐

  1. Trie树入门及训练

    什么叫Trie树? Trie树即字典树. 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本 ...

  2. JAVASCRIPT实现翻页保存已勾选的项目

    <input type="checkbox" name="a" value="1" /><br/> <inpu ...

  3. Spark Streaming揭秘 Day8 RDD生命周期研究

    Spark Streaming揭秘 Day8 RDD生命周期研究 今天让我们进一步深入SparkStreaming中RDD的运行机制.从完整的生命周期角度来说,有三个问题是需要解决的: RDD到底是怎 ...

  4. PAT Ranking (排名)

    PAT Ranking (排名) Programming Ability Test (PAT) is organized by the College of Computer Science and ...

  5. Javacript 客户端保存数据[ locaStorage ]

    1.通常程序员们会使用Cookie进行一些小量的数据储存在客户端浏览器,但孰不知这样会造成不必要的带宽浪费 ,可使用 js 中的 locaStorage 来替代cookie进行存储,但不支持IE8以下 ...

  6. install window7

    install window7 http://www.zhujixc.com/win7home/http://jingyan.baidu.com/album/5bbb5a1b3e301713eba17 ...

  7. 如何查看windows操作系统当前使用的字符集

    如何查看windows操作系统当前使用的字符集 Chcp 显示活动控制台代码页数量,或更改该控制台的活动控制台代码页.如果在没有参数的情况下使用,则 chcp 显示活动控制台代码页的数量. 语法 ch ...

  8. ActiveMQ中Session设置的相关理解

    名词解释: P:生产者 C:消费者 服务端:P 或者 ActiveMQ服务 客户端:ActiveMQ服务 或者 C 客户端成功接收一条消息的标志是这条消息被签收.成功接收一条消息一般包括如下三个阶段: ...

  9. schtasks命令遇见ERROR: The request is not supported.

    执行schtasks命令的环境,下文为机器1:windows server 2008 r2 工作任务(Schedules)所在的机器环境,下文为机器2:windows server 2003 当在机器 ...

  10. sql视图学习笔记--视图

    视图是为用户对数据多种显示需求而创建的,其主要用在一下几种情况: (1)限制用户只能访问特定表特定条件的内容,提高系统的安全性. (2)隐藏表结构.创建多种形式的数透视,满足不同用户需求. (3)将复 ...