23 二叉搜索树的后续遍历数列
题目:二叉搜索树的后续遍历数列
要求:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
左图的正确后序遍历序列5、7、6、9、1 1、10、8
第一:递归求解方法
1 public class Solution { 2 public boolean VerifySquenceOfBST(int [] sequence) { 3 //先来判断特殊情况,传入的数组为空或者长度为零 4 //按照定义来说,空树也是二叉树,但是牛客网的刷题系统里默认不是,所以此处返回false 5 if(sequence==null || sequence.length==0) return false; 6 return VerifySquenceOfBST(sequence,0,sequence.length-1); 7 } 8 public boolean VerifySquenceOfBST(int [] sequence,int start,int end){ 9 //一般情况都是开始<=结尾嘛,具体的分析见博客末尾 10 if(start >= end) return true; 11 //初次递归时,temp是根节点的前一个节点 12 int temp= end-1; 13 //在根节点前,一点点寻找一个比根节点小的值(BST左子树都比root小,右子树都比root大) 14 //找到的话,就找到了左右子树的分界点 15 while(temp >= start && sequence[temp]>sequence[end]) temp--; 16 //在左子树中循环,是否所有的点都比root小 17 for(int i=start;i<temp;i++){ 18 if(sequence[i]>sequence[end]) return false; 19 } 20 return VerifySquenceOfBST(sequence,start,temp) && VerifySquenceOfBST(sequence,temp+1,end-1); 21 } 22 }
bug1: 关于20行到底是返回temp+1还是temp还是temp-1,可以拿个正确的后序遍历序列在草稿纸上,画一下temp的遍历过程就能明白
bug2:20行最后,返回一定是end-1,因为end所在的位置是root啊,已经被排除了
bug3:第6行要写length-1,忘了-1
bug4:关于第10行,一定要做下解释,弄了半天才弄明白
序号 0 1 2 3 4 5 6
情况1: 5、7、6、9、1 1、10、8序列,下一步分为5,7,6左树序列 和 9,11,10右树序列
对于 0 1 2 ,temp最终为0,end为2;
5、7、6
VerifySquenceOfBST(sequence,start,temp) && VerifySquenceOfBST(sequence,temp+1,end-1);
0 0 1 1
满足 if(start >= end) return true;
情况2:对于右树序列,也同样可以这样分析
情况3:有空树的情况
后序遍历序列为 0 1 2 3
5、7、6、8
最终tem为2,end为3,start为0, 所以 VerifySquenceOfBST(sequence,start,temp) && VerifySquenceOfBST(sequence,temp+1,end-1);
0 2 3 2
满足 if(start >= end) return true;
第二:本地编译器代码(todelist)
转载于:https://www.cnblogs.com/shareidea94/p/10886694.html
23 二叉搜索树的后续遍历数列相关推荐
- 剑指offer之 二叉搜索树的后续遍历序列
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. public class Solution {p ...
- 【剑指offer-Java版】24二叉搜索树后序遍历序列
二叉搜索树的后续遍历序列:既然是二叉搜索树,那么就满足左子树结点都大于或者小于根节点右子树都小于或大于根结点 根据搜索树的这种特点,将给定的树划分为左子树或者右子树,递归的处理左右子树 public ...
- [Leetcode][第99题][JAVA][恢复二叉搜索树][中序遍历]
[问题描述][困难] [解答思路] 1. 显示中序遍历 时间复杂度:O(N) 空间复杂度:O(N) class Solution {public void recoverTree(TreeNode r ...
- 23. 二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false.假设输入的数组的任意两个数字都互不相同. 解答 递归 如果内存爆了,那应该是出现了无 ...
- 23.二叉搜索树的后序遍历序列
二叉搜索树的后序遍历序列 题目链接 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 二叉搜索树 二 ...
- 74. Leetcode 501. 二叉搜索树中的众数 (二叉搜索树-中序遍历类)
给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素).如果树中有不止一个众数,可以按 任意顺序 返回.假定 BST 满足如下定义:结 ...
- 73. Leetcode 230. 二叉搜索树中第K小的元素 (二叉搜索树-中序遍历类)
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数).示例 1:输入:root = [3,1,4,null,2], k = 1 输出 ...
- 72. Leetcode 99. 恢复二叉搜索树 (二叉搜索树-中序遍历类)
给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换.请在不改变其结构的情况下,恢复这棵树 .示例 1:输入:root = [1,3,null,null,2] 输出:[3,1, ...
- HDOJ-3999(二叉搜索树+先序遍历)
The order of a Tree 题解:先建立一颗二叉搜索树,然后先序遍历 示例图 import java.util.Scanner;public class Main3 {public sta ...
最新文章
- CSS3 ::selection选择器
- C++ STACK Queue
- C++智能指针 shared_ptr、weak_ptr
- 将Vue+Nodejs项目部署到阿里云服务器
- mac下workbench轻松搭建(drools 7.11.0.Final版本)
- KMP算法的C++实现
- Zookeeper C API 具体应用实例
- Python精讲:Python中集合的概念和创建方法详解
- 解决微信调整字体大小导致页面样式混乱的问题
- java山海经之轩辕_山海经之情剑轩辕 炼化任务详细攻略
- GIS-测绘学概论(5)
- 中国不是不能开发出自己的浏览器,而是没必要
- WiFi流量劫持—— 浏览任意页面即可中毒!
- 篱笆家装宝典之六——地板板材
- AUTOCAD——偏移命令、移动命令
- Excel可视化(2):13个变种图使用技巧
- python中日期格式转换,计算单位天数时间差
- css 平移到某个位置_平移:translate() - CSS3 | 绿叶学习网
- Excel 表格删除重复数据
- Java的String类的常用方法【总结】
热门文章
- springboot配置i18n国际化
- 汽车空调器前缸盖数控加工工艺的制订及夹具设计
- c语言sizeof返回数据类型,sizeof函数返回值类型
- 程序员最经常访问的站点
- 面向数据中台的数据治理七把利剑
- shader编程-二维空间中使用矩阵实现物体的旋转、缩放、平移变换(WebGL-Shader开发基础03)
- python中注释的作用_Python 注释作用写法及示例代码
- 论文阅读笔记——DLT-Net: Joint Detection of Drivable Areas, Lane Lines, and Traffic Objects)
- Java: 函数式接口双冒号::实现方法引用,传递方法作为函数参数
- 使徒行者:痛苦,源自于心中的使命