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

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

相关文章

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

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