代码随想录算法训练营第十七天| 二叉树5

embedded/2025/1/31 15:01:05/

654. 最大二叉树

又是构造二叉树,昨天大家刚刚做完 中序后序确定二叉树,今天做这个 应该会容易一些, 先看视频,好好体会一下 为什么构造二叉树都是 前序遍历

题目链接/文章讲解:代码随想录

视频讲解:又是构造二叉树,又有很多坑!| LeetCode:654.最大二叉树_哔哩哔哩_bilibili

 nums[:maxValueIndex]是一个切片,创建一个新列表,取的是nums开头到索引为maxValueIndex-1位置

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]:if len(nums)==1:return TreeNode(nums[0])node=TreeNode(0)maxValue=0maxValueIndex=0for i in range(len(nums)):if nums[i]>maxValue:maxValue=nums[i]maxValueIndex=inode.val=maxValueif maxValueIndex>0:new_list=nums[:maxValueIndex]node.left=self.constructMaximumBinaryTree(new_list)if maxValueIndex<len(nums)- 1:new_list=nums[maxValueIndex+1:]node.right=self.constructMaximumBinaryTree(new_list)return node

617. 合并二叉树

这次是一起操作两个二叉树了, 估计大家也没一起操作过两个二叉树,也不知道该如何一起操作,可以看视频先理解一下。 优先掌握递归。

题目链接/文章讲解:代码随想录

视频讲解:一起操作两个二叉树?有点懵!| LeetCode:617.合并二叉树_哔哩哔哩_bilibili

不建立新的树,配合递归

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:if not root1:return root2if not root2:return root1root1.val+=root2.valroot1.left=self.mergeTrees(root1.left,root2.left)root1.right=self.mergeTrees(root1.right,root2.right)return root1

700. 二叉搜索树中的搜索

递归和迭代 都可以掌握以下,因为本题比较简单, 了解一下 二叉搜索树的特性

题目链接/文章讲解: 代码随想录

视频讲解:不愧是搜索树,这次搜索有方向了!| LeetCode:700.二叉搜索树中的搜索_哔哩哔哩_bilibili

二叉搜索树(BST) 是一种特殊的二叉树,它满足以下性质:

  1. 左子树的所有节点值 小于 根节点值

  2. 右子树的所有节点值 大于 根节点值

  3. 每个子树 也是一棵二叉搜索树(递归定义)。

递归:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:if not root or root.val==val:return rootif root.val<val:return self.searchBST(root.right,val)if root.val>val:return self.searchBST(root.left,val)

迭代:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:while root:if root.val>val:root=root.leftelif root.val<val:root=root.rightelse:return rootreturn root

98. 验证二叉搜索树 

遇到 搜索树,一定想着中序遍历,这样才能利用上特性。

但本题是有陷阱的,可以自己先做一做,然后在看题解,看看自己是不是掉陷阱里了。这样理解的更深刻。

题目链接/文章讲解:代码随想录

视频讲解:你对二叉搜索树了解的还不够! | LeetCode:98.验证二叉搜索树_哔哩哔哩_bilibili

 递归,注意不是仅判断相邻节点,需判断每个节点和根节点比较

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def isValidBST(self, root: Optional[TreeNode]) -> bool:def validate(node,min_val,max_val):if not node:return Trueif not (min_val<node.val<max_val):return Falsereturn validate(node.left,min_val,node.val) and validate(node.right,node.val,max_val)return validate(root,float('-inf'),float('inf'))


http://www.ppmy.cn/embedded/158385.html

相关文章

菜鸟之路Day08一一集合进阶(一)

菜鸟之路Day08一一集合进阶(一) 作者&#xff1a;blue 时间&#xff1a;2025.1.26 文章目录 菜鸟之路Day08一一集合进阶(一)1.五道经典算法题1.1自定义排序1.2不死神兔1.3猴子吃桃子1.4爬楼梯1.5爬楼梯plus 2.单列集合2.1单列集合体系结构2.2Collection2.2.1Collection的常用…

【gopher的java学习笔记】一文讲懂controller,service,mapper,entity是什么

刚开始上手Java和Spring时&#xff0c;就被controller&#xff0c;service&#xff0c;mapper&#xff0c;entity这几个词搞懵了&#xff0c;搞不懂这些究竟代表什么&#xff0c;感觉使用golang开发的时候也没太接触过这些名词啊~ 经过两三个月的开发后&#xff0c;逐渐搞懂了这…

QT 笔记

本文详述了QT的基础应用&#xff0c;其中包括基础控件应用、多线程等工具类使用、以及显示2D、3D图像等功能&#xff0c;适用于C和计算机视觉领域的开发者。 1、基础控件 QLineEditQComboBoxQMenuQToolBar 2、基础功能 2.1、多线程 线程QThread 2.2、多语言 静态显示动态切…

spring中解决循环依赖的方法

为了避免这种循环依赖问题&#xff0c;Spring 引入了三级缓存的机制&#xff0c;分为&#xff1a; 一级缓存&#xff08;singletonObjects&#xff09;&#xff1a;这是存放已经完全创建好的单例 Bean 的缓存。当 Bean 完全初始化并且可以被使用时&#xff0c;会存放在这里。 …

GPMC介绍

一、GPMC并口简介 GPMC(General Purpose Memory Controller)是TI处理器特有的通用存储器控制器接口&#xff0c;是AM335x、AM437x、AM5708、AM5728等处理器专用于与外部存储器设备的接口&#xff0c;如&#xff1a; ● 异步SRAM内存和专用集成电路(ASIC)设备。 ● 异步&…

Microsoft Visual Studio 2022 主题修改(补充)

Microsoft Visual Studio 2022 透明背景修改这方面已经有很多佬介绍过了&#xff0c;今天闲来无事就补充几点细节。 具体的修改可以参考&#xff1a;Microsoft Visual Studio 2022 透明背景修改&#xff08;快捷方法&#xff09;_material studio怎么把背景弄成透明-CSDN博客文…

【memgpt】letta 课程5:可编程的agent内存

Programming Agent Memory 基本上是内存和内存块的部分。其中每个块都对应于某种字符限制。限制定义了当前块可以用掉多少上下文窗口。该块还有一个标签:

文件(c语言文件流)

前言 什么是文件&#xff0c;文件就是存储在磁盘&#xff08;硬盘&#xff09;的文件。在程序设计中&#xff0c;我们一般谈的文件有两种&#xff1a;程序文件、数据文件&#xff08;文件功能的角度来分类&#xff09; 程序文件包括源程序文件&#xff08;后缀为.c&#xff0…