本文参考自《剑指offer》一书,代码采用Java语言。

更多:《剑指Offer》Java实现合集  

题目 

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

思路

  二叉树后序遍历数组的最后一个数为根结点,剩余数字中,小于根结点的数字(即左子树部分)都排在前面,大于根结点的数字(即右子树部分)都排在后面。根据遍历数组的这个特性,可以编写出一个递归函数,用于实现题目所要求的判断功能。

测试算例 

  1.功能测试(左斜树;右斜树;能对应的二叉树;不能对应的二叉树序列)

  2.特殊测试(null;一个结点)

Java代码

//题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
//如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。 public class SquenceOfBST {
public boolean verifySquenceOfBST(int[] sequence) {
if(sequence== null || sequence.length<=0)
return false;
return verifyCore(sequence, 0, sequence.length-1);
} private boolean verifyCore(int[] sequence,int start,int end) {
if(start>=end)
return true;
//判断左子树
int mid=start;
while(sequence[mid]<sequence[end])
mid++;
//判断右子树
for(int i=mid;i<end;i++) {
if(sequence[i]<sequence[end])
return false;
}
return verifyCore(sequence, start, mid-1)&&verifyCore(sequence, mid, end-1);
}
}

  

收获

  1.寻找出序列规律,就能较快得到思路。此题如果改为BST的前序遍历也是相同的思路。

  2.对于要求处理二叉树序列的问题:找到根结点后,拆分出左右子树,对左右子树可以进行递归处理。

  3.虽然有了思路,但自己在编写代码的时候还是写得比较乱,花了一些时间才能修改出比较简洁和清晰易懂的版本,说明自己写的代码量还是不够,要继续多加练习。

更多:《剑指Offer》Java实现合集  

  

【Java】 剑指offer(33) 二叉搜索树的后序遍历序列的更多相关文章

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

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

  2. 剑指 Offer 33. 二叉搜索树的后序遍历序列

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

  3. 每日一题 - 剑指 Offer 33. 二叉搜索树的后序遍历序列

    题目信息 时间: 2019-06-26 题目链接:Leetcode tag:分治算法 递归 难易程度:中等 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 tr ...

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

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

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

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

  6. 【剑指Offer】二叉搜索树的后序遍历序列 解题报告(Python)

    [剑指Offer]二叉搜索树的后序遍历序列 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervi ...

  7. 【剑指offer】二叉搜索树的后序遍历序列

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26092725 剑指offer上的第24题,主要考察递归思想,九度OJ上AC. 题目描写叙述 ...

  8. Go语言实现:【剑指offer】二叉搜索树的后序遍历序列

    该题目来源于牛客网<剑指offer>专题. 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. Go ...

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

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 题目地址 https://www.nowcoder ...

随机推荐

  1. resultMap自定义某个javaBean的封装规则代码

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  2. 用Emacs的这些年

    读技术博客时发现又有人提起我曾写的那篇口水文章 为何Emacs和Vim被称为两大神器.写那篇文章时,我还在Vim和Emacs之间摇摆.当然主要在用vim,博士学位论文和所有的国际会议文章都是用Vim编 ...

  3. 启动与关闭comcat服务器

    1.找 comcat 安装目录 如 : E:\tomcat\apache-tomcat-7.0.64\bin 2.关闭comcat 服务 3.启动comcat服务

  4. c# 匿名函数

    int t(){    Func<int> m=()=>3;    return m()+m();}

  5. HashMap原理分析(JDK1.7.x之前)

    HashMap 实现Map.Cloneable.Serializable接口,继承AbstractMap基类. HashMap map = new HashMap<String,String&g ...

  6. Spring源码解读

    beanfactory https://www.cnblogs.com/lspz/p/6244948.html requestmapping https://blog.csdn.net/u012557 ...

  7. FPN-Feature Pyramid Networks for Object Detection

    FPN-Feature Pyramid Networks for Object Detection 标签(空格分隔): 深度学习 目标检测 这次学习的论文是FPN,是关于解决多尺度问题的一篇论文.记录 ...

  8. android AysncTask使用

    1.继承AysncTask类 例子: class downloadTask extends AsyncTask<Void,Integer,Boolean> 第一个参数是传入的参数 第二个参 ...

  9. freeRTOS中文实用教程4--资源管理概述

    1.前言 多任务系统中存在一种潜在的风险.当一个任务在使用某个资源的过程中,即还没有完全结束对资源的访问时,便被切出运行态,使得资源处于非一致,不完整的状态 2.并发抢占导致错误的场景 (1)访问外设 ...

  10. C语言函数调用栈(三)

    6 调用栈实例分析 本节通过代码实例分析函数调用过程中栈帧的布局.形成和消亡. 6.1 栈帧的布局 示例代码如下: //StackReg.c #include <stdio.h> //获取 ...