二叉搜索树的后序遍历序列
来源:互联网 发布:ac尼尔森 网购数据 编辑:程序博客网 时间:2024/06/05 21:01
题目链接地址:
http://www.nowcoder.com/practice/a861533d45854474ac791d90e447bafd?tpId=13&tqId=11176&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同
二叉搜索树也叫二叉排序树,即左孩子的值全都小于根节点,右孩子的值全都大于根节点,根节点的左右孩子也是二叉搜索树。
给定如下一颗二叉搜索树:
(注:我写的时候图片显示的是下面的二叉排序树,现在竟然显示的是别人的java项目结构图!!!)
其后序遍历为:2 9 5 16 17 15 19 18 12。
现在假设给定了某个后序遍历数组为:2 9 5 16 17 15 19 18 12
我们从根节点出发,即节点12,如果此数组是某个二叉排序树后续遍历的结果,也就说数组中的数据必然可以分成两部分:一部分是全小于12,一部分全大于12,我们先从数组找第一个大于12的数即16,那么可以该数组可以被分成两部分
第一部分:2 9 5
第二部分:16 17 15 19 18
要使根节点12满足二叉排序树的定义,那么必定有第一部分全部小于12,第二部分全部大于12。
此时第一部分和第二部分又变成了根节点12的左右孩子要满足二叉搜索树的情况,第一部分表示的子树的根节点为5,第二部分表示的子树的根节点为18,即我们现在要判断根节点为5和根节点为18的两棵树是否都满足二叉排序树的定义,这是一个递归的过程。
class ListNode{ int val; ListNode next=null; ListNode(int val) { this.val=val; } } public int findPosition(int[] sequence,int start,int end,int val){ //从sequence的start-end找到第一个大于val的位置 int i=start; for(;i<=end;i++){ if(sequence[i]>val) break; } return i; } public boolean isSquenceOfBST(int[] sequence,int start,int end){ if(end<0||start>=sequence.length) return true; int val=sequence[end]; int position=0; if(start<end){ //将数组在position为位置分成两部分,左边一部分必然全小于val,右边一部分必然要全大于val position=findPosition(sequence, start, end-1, val); for(int i=position;i<=end;i++){ if(sequence[i]<val) //如果出现右边部分有数字小于val则不符合二叉搜索树的定义 return false; } }else{ return true; } //判断左右子树是否符合二叉搜索树的定义 return isSquenceOfBST(sequence,start,position-1)&& isSquenceOfBST(sequence, position, end-1); } /** * 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果 * */ public boolean VerifySquenceOfBST(int [] sequence) { if(sequence.length<=0) return false; return isSquenceOfBST(sequence, 0, sequence.length-1); }
- 二叉树------二叉搜索树的后序遍历序列
- 【树5】二叉搜索树的后序遍历序列
- 题目10:二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 题目1367:二叉搜索树的后序遍历序列
- 1367:二叉搜索树的后序遍历序列 @jobdu
- 二叉搜索树的后序遍历序列
- Q24:二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 题目1367:二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 网页取行情数据-2
- Unable to compile class for JSP 错误的解决过程。
- Java集合
- 清除过的浮动
- Mac OS X下搭建Python3.5.1+PyQt5.6开发环境
- 二叉搜索树的后序遍历序列
- 神奇的 BlocksKit (二)
- 移动端自适应方法
- 主成分分析PCA工作原理和简单介绍
- 设计模式之访问者模式
- vxlan和IPsec结合使用
- iOS字体包导入过程
- select、poll、epoll之间的区别总结
- android分享 ------ 友盟分享(续)