二叉搜索树的后序遍历序列(java版)
来源:互联网 发布:图书馆借阅系统 源码 编辑:程序博客网 时间:2024/06/04 19:42
【题目描述】输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
【解题思路】
BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是合法的后序序列。完美的递归定义 。
//1. 二叉搜索树的特点是,当前节点的左子树值都小于当前节点值,右子树值都大于当前节点值。
//2. 后序遍历的遍历顺序时左子树、右子树、根节点。所以对于给定的一个整数数组,数组的最后一个即为二叉树的根节点。
//3. 数组中根节点前面的元素,若保证在某个元素k前的元素都小于根节点,k之后的元素都大于根节点,则在根节点满足二叉搜索树的性质。
//4. 若每个节点本身和它的左右子树都满足这个性质,则该数组可以转换成一颗二叉搜索树。
public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { int len = sequence.length; if(len != 0){ return isBST(sequence, 0, len-1); }else{ return false; } } public boolean isBST(int[] seq, int start, int end){ if(start >= end){ return true; } int inx=seq[end], m=start; //找到分界点 for(int i=end-1; i>=start; i--){ if(seq[i]<inx){ m = i; break; } if(i == start){ m = -1; } } //分界点前的数据都小于根节点 for(int i=start; i<=m; i++){ if(i<=m && seq[i]>inx){ return false; } } //分界点后的数据都大于根节点 for(int i=m+1; i<end; i++){ if(i<end && seq[i]<inx){ return false; } } //递归判断根节点的左右子树 return isBST(seq, start, m)&&isBST(seq, m+1, end-1); }}
阅读全文
0 0
- java之二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列Java
- 二叉搜索树的后序遍历序列java实现
- 剑指Offer面试题24(Java版):二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列(java版)
- 二叉搜索树的后序遍历序列(算法)
- 二叉搜索树的后序遍历序列(判断后序遍历序列是否合法)
- 二叉树------二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列(Java),复杂度O(n)解法
- 二叉搜索树的后序遍历序列-剑指offer(java实现)
- 二叉搜索树的后序遍历序列(Java实现)
- 【树5】二叉搜索树的后序遍历序列
- 题目10:二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 题目1367:二叉搜索树的后序遍历序列
- 1367:二叉搜索树的后序遍历序列 @jobdu
- 二叉搜索树的后序遍历序列
- jmap命令(Java Memory Map)
- getX getRawX的区别
- html小积累
- hdoj1073 Online Judge(对字符串的操作问题)
- POI使用详解
- 二叉搜索树的后序遍历序列(java版)
- 面试经验之谈
- android获取设备屏幕大小的方法
- Java Character 类
- 【ionic】bar-light头部+viewport
- python pdf 导出插件 pdfkit
- MySQL中优化存储UUID
- 简单记录一下给mysql查询的结果集添加序列号
- JAVA中类、方法、对象的关系