初学python记录:力扣331. 验证二叉树的前序序列化

保姆级教程:手把手配置AutoSar诊断复位(Dcm 0x11服务联动BswM/EcuM) 本文提供AutoSar诊断复位(Dcm 0x11服务联动BswM/EcuM)的保姆级配置教程,详细讲解从诊断服务基础配置到BswM规则引擎搭建、服务端口映射及EcuM复位执行的完整流程。通过Vector配置工具的实际截图和代码片段,帮助开发者高效实现远程复位功能,并分享调试技巧与性能优实践。 阅读详情

题目:

序列化二叉树的一种方法是使用 前序遍历 。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #

例如,上面的二叉树可以被序列化为字符串 "9,3,4,#,#,1,#,#,2,#,6,#,#",其中 # 代表一个空节点。

给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。

保证 每个以逗号分隔的字符或为一个整数或为一个表示 null 指针的 '#' 。

你可以认为输入格式总是有效的

  • 例如它永远不会包含两个连续的逗号,比如 "1,,3" 。

注意:不允许重建树。

思考:

1. 用“#”表示空节点,那么所有值不为“#”的节点都有两个子节点 ----> 用一个数据结构记录每个节点的两个子节点空位是否被填充

2. 前序遍历二叉树 ----> 先进后出 ----> 栈

代码如下:

class Solution(object):
    def isValidSerialization(self, preorder):
        """
        :type preorder: str
        :rtype: bool
        """
        nodes = preorder.split(',')    # 按逗号分割字符串
        stack = [1]     # 用栈存储节点的子节点左右槽位,初始化
        for node in nodes:
            if not stack:    # 若栈空,即还有节点没有填充,但已经没有槽位,返回False
                return False  

            stack[-1] -= 1     # 否则填充节点,将栈顶槽位减一
            if stack[-1] == 0:     # 若栈顶为0,即该节点槽位已满
                stack.pop()

            if node != '#':    
                # 对于普通节点,增加一个值为2的槽位
                stack.append(2)

        if not stack:     # 栈空说明整棵树填充满了,证明是二叉树
            return True  
        else:
            return False

            

提交通过:

 

山东大学FPGA课程实验一 加法器设计 电子设计自动与FPGA设计,实验一 加法器设计 阅读详情

相关推荐

关于机器人精度的总结(复精度和绝对精度区分)

机械臂是工业生产中的要设备,在焊接码垛 以及 非 接触测量等 领域中有 着要应 用。然而由于机械臂本体制造中存在机械制造公差装配误差导致的运动学参数误差以及电机转角与关节转角间减速比误差等,导致机械臂存在。因此需要对机械臂进行标定,提高机械臂的绝对定位精度。ABB系列某款机器人精度参数表。

大胡子大叔的专栏 1万+

思维题,LeetCode331. 验证二叉树前序序列

思维题

EQUINOX1的博客 476

【用unity实现100个游戏之10】复刻经典俄罗斯方块游戏(附项目源码)

当今游戏产业中,经典游戏的复刻一直是一项受欢迎且具有挑战性的任务。俄罗斯方块是一个深入人心、令人上瘾的经典游戏,在过去几十年里一直享有广泛的流行度。其简单而富有策略性的玩法吸引了无数玩家的关注。因此,我决定利用Unity引擎来复刻这款经典游戏,以让更多的人新体验其中的乐趣。通过使用Unity引擎,我能够利用其强大的工具和功能,从头开始构建一个与原版俄罗斯方块游戏相似的游戏。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2737

力扣(合并区间)

给定一组可能叠或相邻的整数区间,合并所有叠或端点相接的区间,返回叠的最小区间列表。例如输入 [[1,3],[2,6],[8,10],[15,18]],输出 [[1,6],[8,10],[15,18]]。核心是先按左端点升序排序,再单次线性扫描完成合并,避免暴力两两比较。

weixin_52811458的博客 299

LeetCode 155. 最小栈|Python 解法详解

这道题的关键是:使用主栈保存数据,辅助栈在每一层同步保存“截至当前位置的最小值”。理解这一点后,再结合边界条件检查,代码就能保持清晰且稳定。

a1250467048的博客 236

LeetCode 1. 两数之和 | 从暴力枚举到哈希表最优解 + 空间换时间思想全复盘

文章摘要 题目要求在数组中找到两数之和等于目标值的下标。核心思路是优查找效率: 暴力法:双循环枚举所有数对,时间复杂度O(n²),效率低但易实现。 哈希表优:利用哈希表O(1)查找特性,遍历时存储已访问元素,每次计算差值并查询,时间复杂度降至O(n)。关键细节是先查后存,避免自匹配。 代码实现:哈希表法通过一次遍历完成,空间换时间,边界处理需注意空数组和足两元素的情况。 常见错误:内层循环起始点、哈希表键值设计、立即返回结果等易错点需警惕。 面试要点:优先选择哈希表解法,解释与暴力法的差异,强调时间

yc2284238579的博客 256

LeetCode //MySQL - 1204. Last Person to Fit in the Bus

This SQL query solves the problem of finding the last person who can board a bus without exceeding the 1000 kg weight limit. The solution involves: Calculating a running total of weights ordered by boarding turn using a window function Filtering to only in

Made in Code 368

leetcode】153. 寻找旋转排序数组中的最小值js

本文介绍了在旋转排序数组中寻找最小值的二分查找算法。通过比较中间元素与数组末尾元素,可以确定最小值所在区间:若中间值大于末尾值,则最小值在右侧;否则在左侧或当前位置。文章提供了两种实现方式,第一种通过样例总结返回nums[l],第二种采用更标准的二分写法,确保循环结束时left==right。两种方法时间复杂度均为O(logn),适用于解决LeetCode相关题目。关键点在于利用旋转数组的特性缩小搜索范围。

2402_83244812的博客 150

LeetCode //C - 1203. Sort Items by Groups Respecting Dependencies

This problem involves sorting items with group constraints and dependency relations. The key steps are: Assign unique groups to items with no group (-1) Build dependency graphs for both items and groups Perform topological sorting on both graphs If both so

Made in Code 374

LeetCode hot100——最大子数组和

给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。是数组中的一个连续部分。6连续子数组 [4,-1,2,1] 的和最大,为 6。nums = [1]123如果你已经实现复杂度为O(n)的解法,尝试使用更为精妙的求解。

weixin_42927227的博客 212

10.LeetCode算法习题讲解--滑动窗口--最大连续为一的个数

利用滑动窗口解决最大连续1的个数

Jammy_1的博客 220

栈和队列专题(三):LeetCode 622. 设计循环队列|数组环形复用 + front/rear 边界详解

本文详细讲解了循环队列的设计与实现,点分析了如何利用数组实现环形结构以避免空间浪费。文章首先通过示例说明普通数组队列的"假溢出"问题,然后提出循环队列的解决方案。核心内容包括:1. 采用牺牲一个存储位置的方案区分队列空满状态;2. 明确front和rear指针的语义(front指向队首元素,rear指向下一个可插入位置);3. 使用取模运算实现下标的循环移动。文章完整实现了LeetCode 622题要求的全部接口,并分析了各种边界情况,特别是队尾元素的获取方法。最后对比了数组实现与链式

Luminousone的博客 470

LeetCode 3597.分割字符串

时间复杂度:O(n) 或 O(n∣Σ∣),其中 n 是 s 的长度,∣Σ∣=26 是字符集合的大小。空间复杂度:O(n) 或 O(n∣Σ∣)。只要当前段是唯一的,就将其加入段列表,标记为已经出现过,并从下一个下标开始构建新的段。因此,最终输出为 [“a”, “b”, “bc”, “c”, “cc”, “d”]。输出: [“a”,“b”,“bc”,“c”,“cc”,“d”]因此,最终输出为 [“a”, “aa”]。输入: s = “abbccccd”输入: s = “aaaa”输出: [“a”,“aa”]

tus00000的博客 221

LeetCode 30:串联所有单词的子串(滑动窗口) —— 题解

滑动窗口——串联所有单词的子串

2601_96587588的博客 796

LeetCode //C - 1202. Smallest String With Swaps

Summary: This problem involves finding the lexicographically smallest string achievable by swapping characters at given indices any number of times. The key idea is to use Union-Find to group all swappable indices into connected components. Characters with

Made in Code 348

LeetCode 28. 找出字符串中第一个匹配项的下标(暴力匹配 + KMP 算法详解)

本文介绍了LeetCode 28题"找出字符串中第一个匹配项的下标"的两种解法:暴力匹配和KMP算法。暴力匹配通过逐个字符比较实现,时间复杂度O(m×n);KMP算法利用next数组跳过必要匹配,时间复杂度O(m+n)。文章详细解释了KMP的核心思想,包括next数组的定义和构建过程,并提供了Python和Java的代码实现。两种方法各具特点:暴力匹配简单直观,KMP更高效但实现复杂,适合处理长字符串匹配问题。

2603_95532426的博客 230

LeetCode算法题精讲】二叉搜索树(BST)精讲:验证二叉搜索树 + 二叉搜索树的最近公共祖先

摘要: 本文深入解析二叉搜索树(BST)的核心特性——有序性,通过LeetCode 98(验证BST)和235(BST最近公共祖先)两道经典题目,揭示BST的解题逻辑。98题强调全局有序性,需通过中序遍历或递归区间法验证;235题则利用BST有序性实现高效自顶向下搜索。文章对比了BST与普通二叉树的操作差异,提供Python/Java/C++三语言代码实现,并延伸至BST家族题(搜索、插入、删除、第K小元素)。核心结论:BST的有序性是其高效操作的基础,理解并应用这一特性是解决相关问题的关键。

2401_88352165的博客 373

leetcode】33.搜索旋转排序数组js

本文介绍了在旋转排序数组中查找目标值的二分搜索算法。通过分析四种可能情况(mid值和目标值分别位于左右两段的同组合),将问题转为常规二分搜索或特殊指针移动。当mid值和目标值位于同一段时按常规二分处理;位于同段时根据相对位置调整搜索方向。算法时间复杂度为O(log n),适用于部分有序数组的快速查找。文章附有JavaScript实现代码和情况分类表格,清晰展示了处理逻辑。

2402_83244812的博客 311

LeetCode 142. 环形链表 II|Python 解法详解

这道题的关键是:快慢指针相遇后,根据距离关系,从头节点和相遇点各放一个同速指针,它们再次相遇的位置就是环入口。理解这一点后,再结合边界条件检查,代码就能保持清晰且稳定。

a1250467048的博客 199

LeetCode hot 100 —41. 缺失的第一个正数

普通数组-5-困难

Canmido的博客 225

关于字符串【力扣151.反转字符串中的单词的思考】

【摘要】本文介绍了字符串反转问题的解决方案。通过三个关键步骤实现:首先去除多余空格,然后整体反转字符串,最后逐个反转单词。方法强调函数封装思想,将同功能模块处理。注意事项指出需特别关注函数封装在代码复用和维护中的要性,这种分步处理方法能有效提高代码可读性和执行效率。

wasb666的博客 490

关于字符串【力扣541.反转字符串II的思考】

本文总结了编程题解中的关键要点:1)处理跳跃操作时可通过for循环条件控制;2)非专门考察反转逻辑时优先使用库函数。特别提醒使用reverse()函数时需注意其左闭右开区间特性(如reverse(begin,begin+3)反转前3个元素),且需引入<algorithm>头文件。底层原理上,C++的reverse()通过双向迭代器交换元素实现反转,通常具有线性时间复杂度。

wasb666的博客 49

Lammps的脚本提交作业方式.mp4

本视频主要讲解Lammps如何使用脚本提交作业LAMMPS简介:大规模原子分子并行模拟器LAMMPS即Large-scale Atomic/Molecular Massively Parallel Simulator,可以翻译为大规模原子分子并行模拟器,主要用于分子动力学相关的一些计算和模拟工作,一般来讲,分子动力学所涉及到的领域,LAMMPS代码也都涉及到了。

最准确指标期货指标公式文华财经指标MACD指标.doc

最准确指标期货指标公式文华财经指标MACD指标.doc

上一篇: 初学python记录:力扣2952. 需要添加的硬币的最小数量
下一篇: 初学python记录:力扣2810. 故障键盘
鱼翅睡大觉
博客等级 码龄6年 426粉丝 · 55原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值