[剑指offer学习心得]之:二叉搜索树的后序遍历序列
来源:互联网 发布:淘宝可以邮寄到国外吗 编辑:程序博客网 时间:2024/06/01 07:21
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true。否则返回 false。假设输入的数组的任意两个数字都互不相同。
解题思路
在后序遍历得到的序列中, 最后一个数字是树的根结点的值。数组中前面的数字可以分为两部分: 第一部分是左子树结点的值,它们都比根结点的值小: 第二部分是右子树结点的值,它们都比根结点的值大。
这就是规律啦,也是一个递归的方式实现。
测试用例
- 功能测试(输入的后序遍历的序列对应一棵二叉树,包括完全二叉树,所有结点都没有左/右子树的二叉树、只有一个结点的二叉树;输入的后序遍历的序列没有对应一棵二叉树)
- 特殊输入测试(指向后序遍历的是null)
代码
public class VerifySquenceOfBST { public static boolean verifySquenceOfBST(int[] sq){ if(sq==null||sq.length<=0){ return false; } return verifySquenceOfBST(sq,0,sq.length-1); } public static boolean verifySquenceOfBST(int[] sq,int low,int high){ if(low>=high){ return true; } int index=low; while(index<high-1&&sq[index]<sq[high]){ index++; } int right=index; while(index<high-1&&sq[index]>sq[high]){ index++; } if(index!=high-1){ return false; } index=right; return verifySquenceOfBST(sq,low,index-1)&&verifySquenceOfBST(sq,index,high-1); } public static void main(String[] args) { // 10 // / \ // 6 14 // /\ /\ // 4 8 12 16 int[] data = {4, 8, 6, 12, 16, 14, 10}; System.out.println("true: " + verifySquenceOfBST(data)); // 5 // / \ // 4 7 // / // 6 int[] data2 = {4, 6, 7, 5}; System.out.println("true: " + verifySquenceOfBST(data2)); // 5 // / // 4 // / // 3 // / // 2 // / // 1 int[] data3 = {1, 2, 3, 4, 5}; System.out.println("true: " + verifySquenceOfBST(data3)); // 1 // \ // 2 // \ // 3 // \ // 4 // \ // 5 int[] data4 = {5, 4, 3, 2, 1}; System.out.println("true: " + verifySquenceOfBST(data4)); // 树中只有1个结点 int[] data5 = {5}; System.out.println("true: " + verifySquenceOfBST(data5)); int[] data6 = {7, 4, 6, 5}; System.out.println("false: " + verifySquenceOfBST(data6)); int[] data7 = {4, 6, 12, 8, 16, 14, 10}; System.out.println("false: " + verifySquenceOfBST(data7)); }}
0 0
- [剑指offer学习心得]之:二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 剑指offer--二叉搜索树的后序遍历序列
- 剑指Offer-->二叉搜索树的后序遍历序列
- 《剑指offer》二叉搜索树的后序遍历序列
- 【剑指Offer】二叉搜索树的后序遍历序列
- 剑指offer--二叉搜索树的后序遍历序列
- 剑指 offer:二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列||剑指offer
- 剑指offer-二叉搜索树的后序遍历序列
- 剑指offer 二叉搜索树的后序遍历序列
- 剑指offer 二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- [剑指offer]二叉搜索树的后序遍历序列
- 《剑指offer》-二叉搜索树的后序遍历序列
- xcode8 图片imageview图片圆角不显示的bug
- Spark入门实战系列--1.Spark及其生态圈简介
- MAC之Qt在Xcode8上编译错误( 二)
- 编译原理 - 课程设计(简易语法分析器)
- gulp常用插件-gulp-imagemin
- [剑指offer学习心得]之:二叉搜索树的后序遍历序列
- 1013
- redis配置读写分离以及利用哨兵sentinel进行自动主从切换
- eclipse +PyDev开发python,import其他模块时eclipse会报错,运行却没有问题
- Listener 监听器理解
- 关于__GNU_SOURCE 这个宏
- 文件处理函数
- d3.js学习4----做一个简单的图表
- 手把手入门神经网络系列(2)_74行代码实现手写数字识别