Leetcode每日一题学习训练——Python3版(从二叉搜索树到更大和树)

2023-12-05 02:44

本文主要是介绍Leetcode每日一题学习训练——Python3版(从二叉搜索树到更大和树),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

版本说明

当前版本号[20231204]。

版本修改说明
20231204初版

目录

文章目录

  • 版本说明
  • 目录
  • 从二叉搜索树到更大和树
    • 理解题目
    • 代码思路
    • 参考代码

原题可以点击此 1038. 从二叉搜索树到更大和树 前去练习。

从二叉搜索树到更大和树

给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。

提醒一下, 二叉搜索树 满足下列约束条件:

  • 节点的左子树仅包含键 小于 节点键的节点。
  • 节点的右子树仅包含键 大于 节点键的节点。
  • 左右子树也必须是二叉搜索树。

示例 1:

img

输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]

示例 2:

输入:root = [0,null,1]
输出:[1,null,1]

提示:

  • 树中的节点数在 [1, 100] 范围内。
  • 0 <= Node.val <= 100
  • 树中的所有值均 不重复

理解题目

1、每个节点的值替换成树中大于或者等于该节点值的所有节点值之和 ==》

用 4节点 举个例子: 比 4节点 大的有 5、6、7、8 节点

所以 4节点 所对应的值 :4 + 5 + 6 + 7 + 8 = 30

代码思路

  1. 它定义了一个名为Solution的类,其中包含一个名为bstToGst的方法。该方法接受一个根节点作为参数,并返回转换后的累加树的根节点。

    def bstToGst(self, root: TreeNode) -> TreeNode:
    
  2. bstToGst方法中,定义了一个名为dfs的内部函数,用于执行深度优先搜索。该函数接受一个节点作为参数,并使用递归的方式遍历整个树。

       # 定义一个深度优先搜索函数,用于遍历二叉搜索树def dfs(root: TreeNode):
    
  3. dfs函数中,首先声明了一个名为total的变量,用于存储当前节点的值加上其左子树中所有节点的值的总和。然后,通过递归调用dfs函数遍历右子树,将当前节点的值更新为total,并将total增加当前节点的值。最后,再次递归调用dfs函数遍历左子树。

      nonlocal total  # 声明total为非局部变量,以便在dfs函数内部修改它的值if root:dfs(root.right)  # 先遍历右子树total += root.val  # 累加当前节点的值root.val = total  # 更新当前节点的值为累加和dfs(root.left)  # 再遍历左子树
    
  4. 在主函数中,初始化了total变量为0,然后调用dfs(root)开始遍历整个树。最后,返回根节点作为转换后的累加树的根节点。

        total = 0  # 初始化累加和为0dfs(root)  # 调用深度优先搜索函数,从根节点开始遍历return root  # 返回转换后的二叉搜索树的根节点

参考代码

这段代码是一个解决**二叉搜索树(BST)转换为累加树(GST)**问题的Python类。

class Solution:def bstToGst(self, root: TreeNode) -> TreeNode:def dfs(root: TreeNode):nonlocal totalif root:dfs(root.right)total += root.valroot.val = totaldfs(root.left)total = 0dfs(root)return root

这篇关于Leetcode每日一题学习训练——Python3版(从二叉搜索树到更大和树)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/455849

相关文章

python3 pip终端出现错误解决的方法详解

《python3pip终端出现错误解决的方法详解》这篇文章主要为大家详细介绍了python3pip如果在终端出现错误该如何解决,文中的示例方法讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下... 目录前言一、查看是否已安装pip二、查看是否添加至环境变量1.查看环境变量是http://www.cppcns

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

python3 gunicorn配置文件的用法解读

《python3gunicorn配置文件的用法解读》:本文主要介绍python3gunicorn配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python3 gunicorn配置文件配置文件服务启动、重启、关闭启动重启关闭总结python3 gun

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Python使用DeepSeek进行联网搜索功能详解

《Python使用DeepSeek进行联网搜索功能详解》Python作为一种非常流行的编程语言,结合DeepSeek这一高性能的深度学习工具包,可以方便地处理各种深度学习任务,本文将介绍一下如何使用P... 目录一、环境准备与依赖安装二、DeepSeek简介三、联网搜索与数据集准备四、实践示例:图像分类1.

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Python3中Sanic中间件的使用

《Python3中Sanic中间件的使用》Sanic框架中的中间件是一种强大的工具,本文就来介绍Python3中Sanic中间件的使用,具有一定的参考价值,感兴趣的可以了解一下... 目录Sanic 中间件的工作流程中间件的使用1. 全局中间件2. 路由中间件3. 异常处理中间件4. 异步中间件5. 优先级

C# ComboBox下拉框实现搜索方式

《C#ComboBox下拉框实现搜索方式》文章介绍了如何在加载窗口时实现一个功能,并在ComboBox下拉框中添加键盘事件以实现搜索功能,由于数据不方便公开,作者表示理解并希望得到大家的指教... 目录C# ComboBox下拉框实现搜索步骤一步骤二步骤三总结C# ComboBox下拉框实现搜索步骤一这