剑指offer之面试题24:二叉搜索树的后序遍历序列
来源:互联网 发布:windows api 多线程 编辑:程序博客网 时间:2024/05/16 10:28
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。举个例子,如图所示二叉搜索树,左孩子结点值<根结点<右孩子结点值
8 / \ 6 10 / \ / \ 5 7 9 11
则输入数组{5,7,6,9,11,10,8},返回true。为什么?
后序遍历的最后一个数字8就是根结点,前三个比8小,左子树结点,后三个比8大,右子树结点。然后同样方法,分别对左、右子树后序遍历序列进行分析:6是左子树根结点,5是6的左子树,7是6的右子树。10是右子树根结点,9是10的左子树,11是10的右子树。
输入数组{7,4,6,5},返回false,为什么?
按照上面方法分析:5是根结点,7>5,则7,4,6是5的右子树结点(没有左子树)。矛盾:4<5,不满足二叉搜索树定义,所以false。
总结规律写出代码:
import java.util.Arrays;public class Solution { public static boolean VerifySquenceOfBST(int[] sequence) { if(sequence==null||sequence.length<=0) return false; int rootVal=sequence[sequence.length-1]; int left=0; for(;left<sequence.length-1;left++){ if(sequence[left]>rootVal) break; } int right=left; for(;right<sequence.length-1;right++){ if(sequence[right]<rootVal){ return false; } } boolean leftYes=true; if(left>0){ leftYes=VerifySquenceOfBST(Arrays.copyOfRange(sequence, 0, left)); } boolean rightYes=true; if(left<sequence.length-1){ rightYes=VerifySquenceOfBST(Arrays.copyOfRange(sequence, left, sequence.length-1)); } return (leftYes&&rightYes); } public static void main(String[] args){ int[] sequence1={5,7,6,9,11,10,8}; int[] sequence2={7,4,6,5}; System.out.println(VerifySquenceOfBST(sequence1)); System.out.println(VerifySquenceOfBST(sequence2)); }}
0 0
- 剑指offer之面试题24:二叉搜索树的后序遍历序列
- 剑指Offer之面试题24:二叉搜索树的后序遍历序列
- [剑指offer][面试题24]二叉搜索树的后序遍历序列
- 【剑指offer】面试题24:二叉搜索树的后序遍历序列
- 剑指Offer:面试题24 二叉搜索树的后序遍历序列
- 《剑指Offer》面试题24:二叉搜索树的后序遍历序列
- 剑指offer 面试题24—二叉搜索树的后序遍历序列
- 剑指offer--面试题24:二叉搜索树的后序遍历序列--Java实现
- 【剑指Offer学习】【面试题24:二叉搜索树的后序遍历序列】
- 剑指Offer面试题24(Java版):二叉搜索树的后序遍历序列
- 剑指offer面试题24-二叉搜索树的后序遍历序列
- 剑指offer-面试题24:二叉搜索树的后序遍历序列
- 剑指Offer----面试题24:二叉搜索树的后序遍历序列
- 剑指offer-面试题24:二叉搜索树的后序遍历序列
- 剑指offer面试题24:二叉搜索树的后序遍历序列
- 剑指offer面试题24:二叉搜索树的后序遍历序列
- 剑指offer--面试题24: 二叉搜索树的后序遍历序列
- 剑指offer——面试题24:二叉搜索树的后序遍历序列
- 常用PHP运行环境一键安装包
- CTS环境的搭建
- 多线程中NSLock
- 多校胡策 round5 by:yts1999
- Android适配
- 剑指offer之面试题24:二叉搜索树的后序遍历序列
- 怎样在PC上调试手机网站
- 统计信号分析与处理 2016 大作业选题
- eclipse中使用maven
- CodeForces 669E Little Artem and Time Machine(树状数组)
- ajax中xmlhttp.readyState==4 && xmlhttp.status==200 是什么意思
- Android反编译(jadx)
- BZOJ 1854|SCOI 2010|游戏|并查集
- js实现字符串中字符出现最多的字符的次数