判断二叉搜索树的后序遍历序列是否合法
来源:互联网 发布:淘宝上最好卖的是什么 编辑:程序博客网 时间:2024/05/29 18:24
简单的分析一下,后序遍历,遍历顺序为左右根,那么序列的最后一个节点必为根节点。由于二叉搜索树的性质,根节点的左子树所有值小于根节点的值,右子树大于根节点,那么,我们只需要将序列分为左子树(leftTree)和右子树(rightTree),然后将左子树(leftTree)再分为左子树(left_leftTree)和右子树(left_rightTree),右子树(rightTree)分为左子树(left_rightTree)和右子树(right_rightTree),依次根据二叉搜索树的性质,进行判断,直到没有节点或者不满足性质则停止。
很明显,可以用递归的思路去解决问题
import java.util.Arrays;/** * 判断所给定的后序遍历序列是否合法 * @author BayMax * */public class AfterTree { public boolean isAfterTree(int[] sequence,int length){ int len = sequence.length; if(sequence==null || length<=0) return false; int i=0; int root = sequence[length-1]; for(;i<length-1;i++){ if(sequence[i]>root){ break; //得到左子树 i为大于root的点的下标 } } int j=i; //右子树起始点 for(;j<length-1;j++){ if(sequence[j]<root) return false; //若发现右子树中有小于根节点的值,则不合法 } boolean left = true; if(i>0) //这里需要使用数组拷贝,不然的话需要在函数中定义范围值例如isAfterTree(int[] sequence,int low,int high) left = isAfterTree(Arrays.copyOfRange(sequence, 0, i),i); boolean right = true; if(j<len-1) right = isAfterTree(Arrays.copyOfRange(sequence, i, j),length-i); return (left&&right); } public static void main(String[] args) { AfterTree a =new AfterTree(); int [] seq = new int[]{5,7,6,9,11,10,8}; int [] seq2 = new int[]{7,4,6,5}; int [] seq3 = new int[]{}; //空树 int [] seq4 = new int[]{1}; //一个根节点 int [] seq5 = new int[]{1,2}; //两个节点 System.out.println(a.isAfterTree(seq, seq.length)); System.out.println(a.isAfterTree(seq2, seq2.length)); System.out.println(a.isAfterTree(seq3, seq3.length)); System.out.println(a.isAfterTree(seq4, seq4.length)); System.out.println(a.isAfterTree(seq5, seq5.length)); }}
参考:
http://blog.csdn.net/scgaliguodong123_/article/details/46539173
0 0
- 判断二叉搜索树的后序遍历序列是否合法
- 二叉搜索树的后序遍历序列(判断后序遍历序列是否合法)
- 判断二叉树的后序遍历序列是否合法
- 二叉搜索树的后序遍历序列序列判断是否是二叉搜索树
- 判断二叉搜索树是否为后序遍历序列
- 二叉树系列7:判断整数序列是不是二叉搜索树的后序遍历结果
- 14 判断给定的二叉排序树后序遍历序列是否合法
- 二叉树------二叉搜索树的后序遍历序列
- 剑指off-判断一个数组是不是搜索二叉树的后序遍历的序列
- 判断给定的数组是否为二叉搜索树的后序遍历序列
- 判断给出的序列是不是一个二叉搜索树的后序遍历
- 判断一个整数数组是不是二叉搜索树的后序遍历序列
- Interview----判断整数序列是否是二叉搜索树的后序遍历结果
- 输入一个数列,判断是否为某一个二叉搜索树的后序遍历序列
- 24 - 判断是否是二叉搜索树的后序遍历序列
- 判断某序列是否为某二叉搜索树的后序遍历
- 判断一个数组是不是二叉搜索树的后序遍历序列——剑指offer
- 剑指offer——判断一个序列是否为二叉搜索树的后序遍历
- 二叉树节点的删除
- 取得URL
- Java 总复习 迷你DVD管理器 关键代码
- yum和apt-get用法及区别
- Oracle 列转行函数 Listagg()
- 判断二叉搜索树的后序遍历序列是否合法
- 理解PHP依赖注入容器(dependency injection container)系列(五) 使用XML 或 YAML 来描述服务
- 程序员必须学会的谷歌搜索技巧
- Mac 安装MySQL 5.7.*
- exec族函数及实战2
- Dubbo负载均衡
- 对线程函数数组、函数指针数组在应用中的一些总结
- 由两个栈实现队列
- Struts1进阶(二)