二叉搜索树的后序遍历序列Java
2016-03-08 16:10
656 查看
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true, 否则返回false。假设输入的数组的任意两个数字都互不相同。
思路:在后序遍历得到的序列中,最后一个数字是树的根结点的值。数组中前面的数字可以分为两部分:第一部分是左子树根结点的值,它们都比 根结点的值小;第二部分是右子树根结点的值,它们都比根结点的值大。
如果要求处理一棵二叉树的遍历序列,我们可以先找到二叉树的根结点,再基于根结点把整棵树的遍历序列拆分成左子树对应的子序列和右子树对应的子序列,接下来再递归地处理这两个子序列。
思路:在后序遍历得到的序列中,最后一个数字是树的根结点的值。数组中前面的数字可以分为两部分:第一部分是左子树根结点的值,它们都比 根结点的值小;第二部分是右子树根结点的值,它们都比根结点的值大。
package offer; public class VerifySequenceOfBST { public static void main(String[] args) { int[]seq = {5,7,6,9,11,10,8}; int[] seq2 = {7,4,6,5}; System.out.println(verifySequenceOfBST(seq)); } public static boolean verifySequenceOfBST(int[] seq){ if(seq==null || seq.length==0) return false; return verifySequenceOfBST(seq,0,seq.length-1); } private static boolean verifySequenceOfBST(int[] seq, int start, int end){ if(start>end) return true; int root = seq[end]; int i=start; while(i<=end-1){ if(seq[i]>root) break; i++; } int j=i; while(j<=end-1){ if(seq[j]<root) return false; j++; } boolean left = true; left = verifySequenceOfBST(seq,start,i-1); boolean right = true; right = verifySequenceOfBST(seq,i,end-1); return left&right; } }
如果要求处理一棵二叉树的遍历序列,我们可以先找到二叉树的根结点,再基于根结点把整棵树的遍历序列拆分成左子树对应的子序列和右子树对应的子序列,接下来再递归地处理这两个子序列。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树