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

news/2025/2/1 0:51:08 标签: 算法, 数据结构

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=0
        maxValueIndex=0
        for i in range(len(nums)):
            if nums[i]>maxValue:
                maxValue=nums[i]
                maxValueIndex=i
        node.val=maxValue
        if 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 root2
        if not root2:
            return root1
        root1.val+=root2.val
        root1.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 root
        if 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.left
            elif root.val<val:
                root=root.right
            else:
                return root
        return 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 True
            if not (min_val<node.val<max_val):
                return False
            return validate(node.left,min_val,node.val) and validate(node.right,node.val,max_val)
        return validate(root,float('-inf'),float('inf'))


http://www.niftyadmin.cn/n/5838930.html

相关文章

doris:JSON导入数据

本文介绍如何在 Doris 中导入 JSON 格式的数据文件。Doris 支持导入标准 JSON 格式数据&#xff0c;通过配置相关参数&#xff0c;可以灵活地处理不同的 JSON 数据结构&#xff0c;并支持从 JSON 数据中抽取字段、处理嵌套结构等场景。 导入方式​ 以下导入方式支持 JSON 格式…

应用程序中处理文件上传的方法

在应用程序中处理文件上传通常涉及以下几个步骤: 一、前端准备 前端负责收集文件,并通过 HTTP 请求将其发送到服务器。常见的方法包括: ①HTML <form>; 表单:使用 enctype="multipart/form-data" 属性指定表单支持文件上传。 ②JavaScript (AJAX):可以使…

第九章 D - E 开头的术语

文章目录 第九章 D - E 开头的术语显示格式 (display format)分布式数据库 (distributed database)DMNNET点语法 (dot syntax) 以 E 开头的术语.可嵌入类 (embeddable class)内嵌 HTML (embedded HTML)内嵌对象 (embedded object)内嵌 SQL (embedded SQL)空字符串 (empty strin…

DBO优化GRNN回归预测matlab

蜣螂优化算法&#xff0c;英文名为 Dung Beetle Optimizer&#xff0c;简称 DBO&#xff0c;是于 2022 年末提出的一种全新群智能优化算法。该算法的灵感主要来源于蜣螂的滚球、跳舞、觅食、偷窃以及繁殖等行为。 本次所使用的数据为 Excel 格式的股票预测数据。这些数据被划分…

Pdf to forms如何实现?如何在3分钟内将PDF自动转换为Microsoft Forms

通过将杂乱的文件转换为标准化表单&#xff0c;简化数据收集——无需手动操作。 问题&#xff1a;为什么非标准文件会破坏您的工作流程 每天&#xff0c;企业和教育工作者都淹没在非结构化数据中&#xff1a;PDF报告、CSV导出或保存为TXT文件的手写笔记。手动将这些数据复制到…

(undone) MIT6.S081 2023 学习笔记 (Day7: LAB6 Multithreading)

网页&#xff1a;https://pdos.csail.mit.edu/6.S081/2023/labs/thread.html 任务1&#xff1a;Uthread: switching between threads (moderate) (doing) 在这个练习中&#xff0c;你将设计一个用户级线程系统中的上下文切换机制&#xff0c;并实现它。为了帮助你开始&#xf…

我的求职面经:(1)C++里指针和数组的区别

经典问题&#xff1a; char s1[]"hello"; char *s2"hello"; 1、s1的值是放在栈上的&#xff0c;值是可以修改的&#xff0c;而hello是一个字符串常量放在静态存储区是不能修改的。 2、内存大小不一样 #include<stdio.h>int main(){char s1[]&quo…

python-leetcode-路径总和

112. 路径总和 - 力扣&#xff08;LeetCode&#xff09; # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:de…