`
jiq408694711
  • 浏览: 36579 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

判断给定序列是否为某BST后序输出

 
阅读更多
#include <iostream>
using namespace std;
/**
* 给定一个序列,判断其是不是某个BST的后序遍历输出
* 思想: 根据在位于序列最后的根节点,将序列划分成两个part。
*		 然后判断后半序列是否都比root大,如果不是,则返回false。(前半序列一定都比root小)
*		 如果当前序列满足BST左右子树两个part的性质,继续递归两个part。
*/
bool judgepostorder(int *a, int n){

	//注意边界条件
	if(n ==0 || n == 1) return true;
	
	int root = a[n-1];
	//找到划分点(第一个大于root的点)
	for(int i=0;i<n-1;i++){
		if(a[i] > root){
			break;
		}
	}

	//如果存在后半序列,则判断是否都大于root
	if(i != n-1){
		for(int j=i+1;j<n-1;j++){
			if(a[j] < root) return false; //不满足
		}
	}

	//各自递归
	return judgepostorder(a, i) && judgepostorder(a+i, n-i-1);
}

int main(){
	int a[] = {2,4,5,3,9,13,8,6};
	int b[] = {2,4,5,3,8,9,3,6};
	int c[] = {0};
	//int d[] = {};
	int f[] = {2,2,2,2};

	cout<<judgepostorder(a, 8)<<endl;	//1
	cout<<judgepostorder(b, 8)<<endl;	//0
	cout<<judgepostorder(c, 1)<<endl;	//1
//	cout<<judgepostorder(d, 0)<<endl;
	cout<<judgepostorder(f, 4)<<endl;	//1
		
	return 0;
}
分享到:
评论

相关推荐

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

    总的来说,判断整数序列是否为二元查找树的后序遍历结果,关键在于理解二元查找树的性质以及后序遍历的特点。通过构造中序序列并检查其顺序,我们可以有效地验证输入序列的合法性。在实际编程中,可以根据具体需求...

    中序列后序求前序

    对于给定的中序和后序遍历序列,我们可以恢复出前序遍历序列,进而构造出原始的二叉树结构。 这个问题的解决方案通常使用递归策略。首先,从后序遍历序列中找到最后一个元素,这个元素就是根节点。然后,根据中序...

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

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

    给定一个前序的字母字符串,并把它们创建成一个二叉树,并且遍历输出它的中序和后序

    在前序序列"ABDEGHCFIJ"的二叉树中,后序遍历可能为"DEGBHJIFCA"。 在实际编程中,二叉树的创建通常包括以下步骤: 1. 读取前序序列,创建根节点。 2. 分别对根节点的左子树和右子树递归执行相同的操作,即用剩余的...

    树的前序,中序,后序排列

    这种遍历方式在二叉查找树(Binary Search Tree, BST)中尤为有用,因为它可以帮助快速定位树中的节点。在给定的代码中,`PreOrderTraverse`函数实现了这一逻辑: ```c void PreOrderTraverse(BiTNode* T) { if (T...

    树的遍历:已知先序中序求后序

    在给定的先序遍历序列中,根节点是序列的第一个元素。 **中序遍历**:中序遍历的顺序是:左子树 -&gt; 根节点 -&gt; 右子树。对于二叉搜索树(BST),中序遍历会得到升序的节点序列。 **后序遍历**:后序遍历的顺序是:...

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

    给定中序和后序遍历序列,可以唯一确定一棵二叉树。这是因为中序遍历给出了所有节点的顺序,而后序遍历可以用来确定根节点的位置。具体步骤如下: 1. **后序遍历序列的最后一个元素**是二叉树的根节点。 2. 将后序...

    二叉树的遍历及通过前序中序遍历确定后序层序遍历

    根据给定的描述,程序允许用户输入二叉树的节点,通过0作为终止符构建二叉树,然后输出四种遍历的结果。这个过程通常涉及到递归或栈/队列的操作。 通过前序遍历和中序遍历可以唯一确定一棵二叉树。这是因为: - ...

    微软面试题库

    本题要求判断给定的整数序列是否为某二元查找树的后序遍历结果。 **解题思路:** 1. **二叉搜索树的性质:**二叉搜索树的后序遍历序列具有一定的规律性。 2. **递归验证:**根据二叉搜索树的性质,采用递归的方式来...

    PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法

    在这个问题中,我们探讨的是如何使用PHP来构建一棵二叉树,并根据给定的前序遍历(Preorder Traversal)和中序遍历(Inorder Traversal)序列,然后输出后序遍历(Postorder Traversal)序列。 **前序遍历**是访问...

    二叉树的建立和遍历(前序、中序、后序)

    在给定的文件"二叉树的建立和遍历.cpp"中,作者可能提供了具体的C++实现,包括了二叉树的构造函数以及前序、中序和后序遍历的函数。通过阅读和理解这段代码,你可以更深入地掌握二叉树遍历的原理和技巧,并能够实际...

    常见:算法面试题21

    判断给定序列是否符合二叉查找树后序遍历的特点,通常后序遍历的顺序是左子树-右子树-根节点,可以用递归或栈来检查这个顺序。 以上就是这些算法面试题的详解,它们涵盖了数据结构(二叉树、链表、栈)、排序算法...

    第五次上机课的 题目pdf版本

    此任务要求实现一个函数,计算给定序列的最长递增子序列的长度。 五、实验任务 5:任务安排问题(taskprocess.cpp) * 输入格式:n,ri,pi * 输出格式:一个数,表示最小的Σti * 样例输入:3 1 2 3 4 2 2 * 样例...

    数据结构北大上机实践考试试题4.1

    之后输出构建的二叉树的前序遍历结果,以及树中的一致性节点数量、双子节点数量和是否为二叉搜索树的结果。 综上所述,本题主要考查了二叉树的构建、遍历方法以及特定条件下的判断等多个方面的知识。

    二叉树的基本操作实现及其应用

    3. **检查二叉树是否为空**:`BinTreeEmpty(BitTree *BT)` 函数用于判断二叉树是否为空,如果根节点指针为空,则返回1表示空树,否则返回0表示非空树。 4. **按遍历次序输出二叉树**:`BinTraverse(BitTree *BT)` ...

    山东省分析数据库的考试题目基础.pdf

    判断一个给定的二叉树是否为BST,可以使用深度优先搜索(DFS)或者广度优先搜索(BFS),在遍历过程中检查每个节点的左右子树是否满足BST的性质。 约瑟夫环问题是一个经典的算法问题,通常使用循环链表结构解决。...

    树的相关编程.docx

    对于序列是否是二叉搜索树(BST)的后序遍历序列的判断,需要考虑BST的性质:左子树所有节点小于根节点,右子树所有节点大于根节点。通过对序列进行排序和比较,可以确定其合法性。 二叉搜索树与有序双向链表之间的...

    常见:算法面试题总结 (2)1

    通过检查序列是否满足这一性质,可以判断给定序列是否是二元查找树的后序遍历结果。 以上就是根据题目内容涉及的一些算法和数据结构知识点,它们在实际面试中经常出现,是提升编程技能和准备面试的重要部分。

    二叉树实现前序遍历,中序遍历和后序遍历,检查是否为二叉查找树

    **BSTcheck功能**是用来检查一个给定的二叉树是否符合二叉查找树的性质。以下是一个简单的实现: ```cpp bool isBST(Node* root, int min = INT_MIN, int max = INT_MAX) { if (root == nullptr) return true; if...

    2020年408真题及答案解析1

    根据题目给定的遍历序列,可以反推出二叉树的后序遍历序列,即b,f,e,d,c,a。 5. **二叉排序树** 二叉排序树(BST)是一种特殊的二叉树,其中每个节点的左子树只包含小于当前节点的元素,右子树包含大于或等于当前...

Global site tag (gtag.js) - Google Analytics