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 ...
最新文章
- 让机器像人一样听音乐,Facebook开源Demucs项目
- LeetCode Monotonic Array(数组单调性)
- jdk和tomcat配置
- 半双工、全双工以太网
- MVVM模式的3种command总结[2]--RelayCommand
- (68)zabbix windows性能计数器使用详解
- Apache 配置:是否显示文件列表
- Matplotlib 中文用户指南 3.1 pyplot 教程
- NSMapTable、NSHashTable与NSPointerArray的封装
- VC实现多格式图像的转换
- linux下mysql 8.0配置大小写不敏感
- Test for Activity to display Deslayed
- Extjs学习(3):事件和动作
- 关于计算机技术职业资格那些事
- 软件工程:状态,行为,事件
- X-Scan介绍和使用方法
- 微创器械行业调研报告 - 市场现状分析与发展前景预测
- 求助,关于MFC中的 Secur32.lib问题
- 弹性公网IP ping不通?
- SRAM and DRAM