剑指 Offer(第2版)面试题 33:二叉搜索树的后序遍历序列

文章介绍了如何使用递归方法验证给定整数序列是否为二叉搜索树的后序遍历序列,通过不断分割序列并检查左右子树的特性来确定。时间复杂度为O(n),空间复杂度为O(depth)。

剑指 Offer(第2版)面试题 33:二叉搜索树的后序遍历序列

剑指 Offer(第2版)面试题 33:二叉搜索树的后序遍历序列

题目来源:46. 二叉搜索树的后序遍历序列

解法1:递归

什么是二叉搜索树(BST)?

它或者是一棵空树,或者是具有下列性质的二叉树:

  1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉搜索树。

后序遍历序列的最后一个值是二叉树的根节点。

二叉搜索树的后序遍历序列的前面的值一部分小于根节点,一部分大于根节点。

算法:

  1. 对于范围为 [begin, end] 的一段序列 sequence,将 sequence[end] 作为根节点的值,记为 rootValue。
  2. 初始化 splitIndex = begin,向后遍历 sequence,直到找到第一个满足 sequence[splitIndex] > rootValue 的 plitIndex。
  3. 由此得到根节点的两棵子树的区间:左子树区间为 [begin, splitIndex - 1],右子树区间为 [splitIndex, end - 1]。
  4. 遍历右子树区间 [splitIndex, end - 1],若发现该区间有值小于 rootValue,则不满足 BST 的特性,返回 false。
  5. 递归下去判断左子树区间和右子树区间是否是后序遍历序列。

代码:

class Solution
{
public:
	bool verifySequenceOfBST(vector<int> sequence)
	{
		// 特判
		if (sequence.size() <= 1)
			return true;
		return postOfBST(sequence, 0, sequence.size() - 1);
	}
	// 辅函数 - 递归判断
	bool postOfBST(vector<int> &sequence, int begin, int end)
	{
		if (begin >= end)
			return true;
		int splitIndex = begin, rootValue = sequence[end];
		while (splitIndex < end && sequence[splitIndex] <= rootValue)
			splitIndex++;
		for (int i = splitIndex; i < end; i++)
			if (sequence[i] < rootValue)
				return false;
		return postOfBST(sequence, begin, splitIndex - 1) && postOfBST(sequence, splitIndex, end - 1);
	}
};

复杂度分析:

时间复杂度:O(n),其中 n 是二叉树的节点个数。

空间复杂度:O(depth),其中 depth 是二叉树的深度。

代码下载地址: https://pan.quark.cn/s/a4b39357ea24 在计算机视觉技术中,数据集扮演着训练和评估模型的核心角色。Labelme作为一个广受欢迎的开源工具,能够支持用户以交互方式对图像进行标注,而COCO(Common Objects in Context)则是一种被广泛采纳的数据集标准格式,适用于包括物体检测、图像分割在内的多种任务。本文将详细阐述如何将Labelme生成的标注数据转换为COCO数据集的标准格式。 Labelme标注的图像在输出为JSON格式时,会包含以下核心内容: 1. `version`: 指明JSON文件的本信息。 2. `flags`: 目前未定义或保持为空,预留用于未来的功能扩展。 3. `shapes`: 列表形式存储对象的形状信息,每个形状项包含`label`(对象类别名称),`points`(构成对象边缘的多边形顶点),以及`shape_type`(通常为“polygon”)。 4. `imagePath`和`imageData`: 提供原始图像的存储路径和二进制数据,便于后续图像的还原。 5. `imageHeight`和`imageWidth`: 明确标注图像的垂直和水平尺寸。 COCO数据集的标准格式中定义了三种主要的标注类型: 1. Object instances(目标实例):主要用于执行物体检测任务。 2. Object keypoints(目标上的关键点):适用于人体姿态估计相关应用。 3. Image captions(看图说话):用于生成图像的文本描述。 COCO的JSON结构中包含以下基本组成部分: 1. `images`:记录图像的基本属性,包括`height`(高度)、`...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值