判断给定的数组是否为二叉搜索树的后序遍历序列

2024-06-22 14:18

本文主要是介绍判断给定的数组是否为二叉搜索树的后序遍历序列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意描述:输入一个整数数组,判断该数组是不是某个二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。例如输入{5,7,6,9,11,10,8}返回true;输入{7,4,6,5}返回false

对应的后序遍历结果为5、7、6、9、11、10、8

解题思路:在后序遍历序列中,最后一个数字是树的根结点的值,前面的数字可分为两个部分:第一部分是左子树,值都比根值小;第二部分是右子树,值都比根大。按些规律,依次判断,如果数组处理完毕则是后序遍历序列,否则不为后序遍历序列

(Java版)

boolean VerifySequenceOfBST(int[] sequence, int start, int end) {		if(sequence == null || (end-start)<=0)return true;int root = sequence[end-1];int i = start;for(; i < end-1; i++)if(sequence[i] > root)break;int j = i;for(; j < end-1; j++)if(sequence[j] < root)return false;//判断左、右子序列是不是满足二叉搜索树boolean left = true;if(i > start)left = VerifySequenceOfBST(sequence, start, i);boolean right = true;if(i < end - 1)right = VerifySequenceOfBST(sequence, i ,end-1-i);return (left && right);		
}

(C++版)

bool VerifySequenceOfBST(int sequence[], int length) {if (sequence == NULL || length <= 0)return false;int root = sequence[length - 1];//在二叉搜索树中左子树的结点值小于根结点值int i = 0;for (; i < length - 1; i++) {if (sequence[i] > root)break;}		//在二叉搜索树右子树的结点值大于根结点值int j = i;for (; j < length - 1; j++) {if (sequence[j] < root)return false;}//判断左子树是不是二叉搜索树bool left = true;if (i > 0)left = VerifySequenceOfBST(sequence, i);//判断右子树是不是二叉搜索树bool right = true;if (i < length - 1)right = VerifySequenceOfBST(sequence + i, length - i - 1);return (left && right);
}

 (Golang版)

func isBinaryTreePostOrder(arr []int) bool {if len(arr) == 0 || len(arr) == 1 {return true}lastEle := arr[len(arr)-1]posIdx := 0for ; posIdx < len(arr); posIdx++ {if arr[posIdx] > lastEle {break}}i := posIdxfor ; i < len(arr); i++ {if arr[i] < lastEle {return false}}left := isBinaryTreePostOrder(arr[0:posIdx])right := isBinaryTreePostOrder(arr[posIdx:len(arr)-1])return left && right
}

 

 

 

 

这篇关于判断给定的数组是否为二叉搜索树的后序遍历序列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084523

相关文章

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序