`

java-9. 判断整数序列是不是二元查找树的后序遍历结果

 
阅读更多

public class IsBinTreePostTraverse{
	
	static boolean isBSTPostOrder(int[] a){
		if(a==null){
			return false;
		}
		/*1.只有一个结点时,肯定是查找树
		 *2.只有两个结点时,肯定是查找树。例如{5,6}对应的BST是   6		{6,5}对应的BST是	5
		 *							   					/						 \
		 *											   5 						  6	
		 */
		if(a.length<=2){
			return true;
		}
		//多于三个结点,则递归判断
		return isBSTPostOrderHelper(a,0,a.length-1);
		
		
	}
	
	static boolean isBSTPostOrderHelper(int[] a,int s,int e){
		int len=a.length;
		if(!(s>=0&&s<len&&e>=0&&e<len)){//检查下标是否合法
			return false;
		}
		if(s==e||s==e-1){
			return true;
		}
		int i=e-1;
		while(a[i]>a[e])i--;//直到a[i]是e的左孩子
		if(s<=i&&i<e){
			boolean firstPart=isBSTPostOrderHelper(a,s,i);
			boolean secondPart=isBSTPostOrderHelper(a,i+1,e-1);
			return firstPart&&secondPart;
		}
		return false;
	}
	
	public static void main(String[] args) {
		int[][] a= {
				{5,7,6,9,11,10,8},
				{5,6,7},
				{5,7,6},
				{1,3,2,5,7,6,4,9,11,10,13,15,14,12,8},
		};
		for(int[] each:a){
			boolean re=isBSTPostOrder(each);
			System.out.println(re);
		}
	}
}

分享到:
评论

相关推荐

    判断整数序列是否为二元查找树的后序遍历结果的解决方法

    题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果. 8 / \ 6 10 / \ / \ 5...

    已知先序和中序遍历序列,求后序遍历序列.TXT

    根据给定文件的信息,本文将围绕“已知先序和中序遍历序列,求后序遍历序列”的核心主题进行展开,详细解析其中涉及的数据结构与算法,并深入理解其在C语言中的实现细节。 ### 数据结构:二叉树 在计算机科学中,*...

    二叉树先中序求后序 给出该二叉树的后序遍历结果;

    4. 最后,按照后序遍历的顺序(左子树 -&gt; 右子树 -&gt; 根节点)打印或记录遍历结果。 判断一个二叉树是否为平衡二叉树,是指这个二叉树的任意两个叶子节点的深度差不超过1。如果超过1,那么这个二叉树就不是平衡的。...

    链式二叉树的后序创建、递归后序遍历、非递归堆栈后序遍历、后序销毁

    例如,对于构建树或查找特定结构,后序遍历可能是最佳选择。同时,非递归方法在处理大数据量时,由于避免了递归调用的开销,通常效率更高。学习和实践这些方法,不仅可以加深对二叉树的理解,也能提高解决实际问题的...

    二叉树先序、中序、后序遍历非递归算法

    ### 二叉树先序、中序、后序遍历非递归算法 #### 前言 在计算机科学中,二叉树是一种常见的数据结构,它被广泛应用于各种算法和程序设计中。二叉树的遍历是理解并操作二叉树的基础,通常有三种主要的遍历方式:...

    python-leetcode面试题解之第106题从中序与后序遍历序列构造二叉树-题解.zip

    1. **找到后序遍历中的根节点**:后序遍历序列的最后一个元素是整棵树的根节点。 2. **分割中序遍历序列**:由于中序遍历序列是有序的,可以找到根节点在中序遍历序列中的位置,将序列分为两部分,左侧是左子树的...

    已知二叉树的前序和中序遍历,打印后序遍历

    2. **匹配前序遍历**:遍历P遍历,每遇到一个元素,查找该元素在I遍历中的位置。当找到时,该元素即为当前子树的根节点。 3. **构建子树**: - 将从根节点到当前元素之间的所有左子树元素压入栈中(按照P遍历的顺序...

    有前序中序求后序遍历

    假设我们有一棵二叉树,给定它的前序遍历序列和中序遍历序列,需要求出该二叉树的后序遍历序列。 #### 解决方案分析 1. **解析输入序列**:首先解析输入的前序和中序遍历序列,其中每个节点用一个小写字母表示。 2...

    数据结构C++二叉树的先序遍历、中序遍历和后序遍历实现

    数据结构C++二叉链表的先序遍历、中序遍历和后序遍历实现

    数据结构试验报告用先序中序建立二叉树后序遍历非递归.pdf

    根据以上知识点,我们可以总结出该实验报告主要涉及构建二叉树(特别是基于先序和中序遍历序列),以及利用栈实现二叉树的后序遍历算法。在实现过程中,采用了C语言的结构体和指针操作,以及标准输入输出函数。这些...

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    在Java世界里,`json-lib-2.1.jar` 是一个用于处理JSON的库,它提供了一系列的方法来将Java对象转换为JSON格式,以及将JSON字符串反序列化回Java对象。这个库支持多种Java类型,包括基本类型、集合、Map、自定义Java...

    数据结构(先中后序遍历)

    本文档主要介绍了树的数据结构,特别是二叉树的创建和遍历,包括先序、中序、后序以及层序遍历。这些遍历方法在解决许多算法问题时非常关键,如搜索、排序、树的复制和打印等。 **先序遍历**(PreOrder Traversal)...

    数据结构实验报告8-树-求二叉树先序、中序、后序遍历次序的第k个访问结点-实验内容与要求.docx

    根据给定文件的信息,本次实验的主要目标是通过编程来实现对二叉树的先序、中序、后序遍历,并找到这些遍历次序下的第k个访问节点。接下来,我们将详细介绍实验的要求、设计思路、算法实现以及部分关键代码。 ### ...

    根据二叉树前序遍历和中序遍历的结果输出后序遍历(java)

    本话题将详细探讨如何根据给定的二叉树前序遍历和中序遍历的结果,利用Java来输出其后序遍历的序列。 前序遍历的顺序是:根节点 -&gt; 左子树 -&gt; 右子树; 中序遍历的顺序是:左子树 -&gt; 根节点 -&gt; 右子树; 后序遍历的...

    二叉搜索树的后序遍历序列1

    题目要求判断给定的整数数组是否为某二叉搜索树的后序遍历序列。后序遍历的顺序是左子树 -&gt; 右子树 -&gt; 根节点。在二叉搜索树中,由于左右子树的特性,后序遍历序列具有以下特征: 1. 数组的最后一个元素是整个二叉...

    php-leetcode题解之从中序与后序遍历序列构造二叉树.zip

    2. 将后序遍历序列分成左右两部分,左侧部分是左子树的后序遍历,右侧部分是右子树的后序遍历。 3. 使用相同的逻辑递归地构造左子树和右子树,但此时处理的是子序列,而不是整个序列。 在PHP中实现这个算法,通常会...

    JAXB2 jaxb-api.jar jaxb-xjc.jar jaxb-impl.jar activation.jar

    JAXB2,全称为Java Architecture for XML Binding 2,是Java平台上的一个标准技术,用于在XML和Java对象之间进行绑定。它允许开发者通过简单的API将XML文档转换为Java对象,反之亦然,大大简化了XML数据处理。JAXB2...

    81 – 判断列表是否为搜索二叉树后序遍历的结果

    题目81涉及到的是判断一个整数列表是否为某个二叉搜索树的后序遍历结果。后序遍历的特点是先遍历左右子树,最后访问根节点,因此最后一个元素即为根节点。为了验证这个列表是否符合后序遍历的顺序,我们可以按照以下...

    N 叉树的后序遍历1

    总的来说,N叉树的后序遍历是一种重要的树遍历策略,它在解决涉及树结构的问题时非常有用,例如在搜索、排序和数据结构的序列化与反序列化等场景。通过迭代方法,我们可以有效地遍历任意深度的N叉树,而不会像递归...

Global site tag (gtag.js) - Google Analytics