判断二叉树的后序遍历序列是否合法
来源:互联网 发布:程序员转行适合做什么 编辑:程序博客网 时间:2024/06/05 17:29
题目:输入一个整数数组,判断该数组是不是某个二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false.假设输入的数组任意两个数字都不相同。
分析:
二叉树的后序遍历的结果中,最后一个是根节点,从头开始比较数组与根节点,如果大于根节点则停止,停止位置之前就是左子树,之后到倒数第二个节点就是右子树,然后使用递归分别对左子树和右子树进行操作。具体代码如下:
package problem2;import java.awt.peer.RobotPeer;/** * @author Hutongling * * @time:2017年3月21日 上午10:02:43 */public class 二叉搜索树的后序遍历序列是否合法 { public boolean verifySequenceOFBST(int[] list,int length){ if(list ==null || length==0) return false; int root=list[length-1]; //在二叉搜索树中的左子树的节点小于根节点 int i=0; for(;i<length-1;++i){ if(list[i]>root) break; } //在二叉搜索树中的右子树的节点大于根节点 int j=i; for(;j<length-1;++j) if(list[j]<root) return false; //判断左子树是不是二叉搜索树 boolean left=true; if(i>0) left=verifySequenceOFBST(list,i); //判断右子树是不是二叉搜索树 boolean right=true; if(i<length-1){ int rightList[] = new int[list.length - i - 1]; System.arraycopy(list, i, rightList, 0, list.length - i - 1); right=verifySequenceOFBST(rightList, length-i-1); } return (left && right); } public static void main(String[] args) { //int data[]={5,7,6,9,11,10,8}; //int data[]={7,4,5,6}; int data[]={1,4,3,2}; 二叉搜索树的后序遍历序列是否合法 test=new 二叉搜索树的后序遍历序列是否合法(); //boolean result=test.weatherPostOrderListIsLeagal(data); boolean result=test.verifySequenceOFBST(data,data.length); System.out.println(result); }}
代码结果: true.
0 0
- 判断二叉搜索树的后序遍历序列是否合法
- 判断二叉树的后序遍历序列是否合法
- 二叉搜索树的后序遍历序列(判断后序遍历序列是否合法)
- 14 判断给定的二叉排序树后序遍历序列是否合法
- 判断二叉排序树的后序遍历是否合法
- 二叉搜索树的后序遍历序列序列判断是否是二叉搜索树
- 二叉树系列7:判断整数序列是不是二叉搜索树的后序遍历结果
- 《剑指offer》:[24]判断一个序列是否为二叉树的后序遍历序列
- 判断一个数组序列为二叉树的后序遍历序列
- 判断一个序列是否是一棵二叉树的后序遍历序列(分治算法)
- 二叉树的后序遍历序列
- 判断二叉搜索树是否为后序遍历序列
- 剑指off-判断一个数组是不是搜索二叉树的后序遍历的序列
- 判断给定的数组是否为二叉搜索树的后序遍历序列
- 判断给出的序列是不是一个二叉搜索树的后序遍历
- 判断整数序列是不是某二叉查找树的后序遍历的结果
- 树(4)判断某个序列是否是二叉查找树的后序遍历结果
- 判断整数序列是不是二叉查找树的后序遍历结果
- bootstrap selectpicker 动态加载数据
- Windows系统获取屏幕宽度和高度
- ionic2 从子页面返回带参数的两种方法
- iOS @property探究(一): 基础详解
- 自定义控件之绘图篇(二) —— 路径及文字
- 判断二叉树的后序遍历序列是否合法
- 黑客与画家
- 双色球(用sql实现)
- java RMI
- QT QTableWidget空值检测问题
- 开始博客记录生活一切源起与Android
- html 块级元素和行内元素
- open初学
- Switch能否用string做参数