python coding with ChatGPT 打卡第17天| 二叉树:找树左下角的值、路径总和

相关推荐
python coding with ChatGPT 打卡第12天| 二叉树:理论基础
python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历
python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历
python coding with ChatGPT 打卡第15天| 二叉树:翻转二叉树、对称二叉树
python coding with ChatGPT 打卡第16天| 二叉树:完全二叉树、平衡二叉树、二叉树的所有路径、左叶子之和

文章目录

  • 找树左下角的值
    • Key Points
    • 相关题目
    • 视频讲解
    • 重点分析
  • 路径总和
    • Key Points
    • 相关题目
    • 视频讲解
    • 重点分析

找树左下角的值

Key Points

找出树的最后一行的最左边的值

相关题目

513. 找树左下角的值

视频讲解

递归中带着回溯

重点分析

方法一:层序遍历

def findBottomLeftValue(root):queue_record = [root]res = root.valwhile queue_record:level_size = len(queue_record)for i in range(level_size):node = queue_record.pop(0)if i==0:res = node.valif node.left:queue_record.append(node.left)if node.right:queue_record.append(node.right)return res

方法二:层序遍历简洁版

class Solution(object):def findBottomLeftValue(self, root):if not root:return Nonequeue = [root]while queue:current = queue.pop(0)# 先右后左加入队列,确保左边的节点最后被处理,从而保留在current中if current.right:queue.append(current.right)if current.left:queue.append(current.left)# 循环结束时,current中存储的是最后一层最左边的节点return current.val

这段代码使用了BFS来确保按层遍历树的节点,并且通过在每层遍历时记录遍历到的第一个节点值,最终找到了最后一行最左边的值。请注意,这里故意先将右子节点加入队列,然后加入左子节点,是为了在处理每一层的节点时,最后处理左子节点,但是对于寻找最后一行最左边的值的目的而言,只需要记录每一层第一次访问的节点即可,因此实际上你可以按照正常的顺序(先左后右)加入队列,然后最后处理的节点即为所求。这样的处理方式更直观且易于理解。

方法三:递归法

class Solution:def findBottomLeftValue(self, root: TreeNode) -> int:self.max_depth = float('-inf')self.result = Noneself.traversal(root, 0)return self.resultdef traversal(self, node, depth):if not node.left and not node.right:if depth > self.max_depth:self.max_depth = depthself.result = node.valreturnif node.left:self.traversal(node.left, depth+1)if node.right:self.traversal(node.right, depth+1)

递归的另一种写法,由ChatGPT提供
在这里插入图片描述

路径总和

Key Points

叶子节点是指没有子节点的节点。

相关题目

112. 路径总和
113. 路径总和ii

视频讲解

路径总和

重点分析

112
方法一:递归

def hasPathSum(root: TreeNode, targetSum: int) -> bool:if not root:return False# 更新目标和targetSum -= root.val# 如果是叶子节点,检查目标和是否为0if not root.left and not root.right:return targetSum == 0# 递归遍历左右子节点return hasPathSum(root.left, targetSum) or hasPathSum(root.right, targetSum)

在这里插入图片描述方法二:迭代法

def hasPathSum(root, targetSum):if not root:return Falsestack_record = [(root, root.val)]while stack_record:node, value = stack_record.pop()if not node.left and not node.right:if value == targetSum:return Trueelse:if node.right:stack_record.append((node.right, value+node.right.val))if node.left:stack_record.append((node.left, value + node.left.val))return False

113 方法一:递归法
在这里插入图片描述

class Solution:def pathSum(self, root: TreeNode, targetSum: int) -> [[int]]:result = []self.dfs(root, targetSum, [], result)return resultdef dfs(self, node, targetSum, path, result):if not node:return# 添加当前节点到路径path.append(node.val)# 检查是否是叶子节点且路径总和等于目标和if not node.left and not node.right and sum(path) == targetSum:result.append(list(path))else:# 递归遍历左右子节点self.dfs(node.left, targetSum, path, result)self.dfs(node.right, targetSum, path, result)# 回溯前去除当前节点path.pop()# 示例使用
# 假设有一个二叉树和目标和,可以创建TreeNode实例并调用Solution().pathSum(root, targetSum)来获取结果

在这里插入图片描述

方法二:迭代法

def pathSum(root, targetSum):if not root:return []stack_record = [(root, [root.val])]res = []while stack_record:node, value_list = stack_record.pop()if not node.left and not node.right:if sum(value_list) == targetSum:res.append(value_list)else:if node.right:stack_record.append((node.right, value_list+[node.right.val]))if node.left:stack_record.append((node.left, value_list + [node.left.val]))return res

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot+随机盐值+双重MD5实现加密登录

🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》 🛸学无止境,不骄不躁,知行合一 文章目录 前言一、salt…

阿里云游戏服务器收费价格表,一年和1个月报价

阿里云游戏服务器租用价格表:4核16G服务器26元1个月、146元半年,游戏专业服务器8核32G配置90元一个月、271元3个月,阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价: 阿里云游戏服务器租用价格表 阿…

Linux系统调试课:硬件断点

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢在linux内核编程中,经常会遇到由于内存被篡改,例如 buffer overflow,野指针,write after free等。查找分析此类问题非常的麻烦。 一、什么是硬件断点 硬件断点,是Linux内核中是一种被ptrace和内核内调试器使用调试…

Codeforces Round 923 (Div. 3) A - E

CF1927A Make it White 代码如下&#xff1a; //朴素版 #include<bits/stdc.h> using namespace std; using ll long long; const ll N 200005; #define inf 0x7fffffff void solve() {ll n;cin>>n;string a;cin>>a;ll x-1,y0;a a;for(ll i1;i<n;i){i…

【数据分享】1929-2023年全球站点的逐月平均降水量(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;说到常用的降水数据&#xff0c;最详细的降水数据是具体到气象监测站点的降水数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全…

为什么要用建造者模式

因为如果不使用建造者模式&#xff0c;使用一个类时&#xff0c;类中可能会创建很多重载的构造方法。 当使用了建造者模式&#xff0c;使用一个类时&#xff0c;可以选择性地给对象的属性赋值&#xff0c;避免类中可能会创建很多重载的构造方法。 以下是最简单的例子&#xff…

Spring Security 4.X(XML文件配置session超时,单点登录-session并发控制,退出/logout)

目录 前言 一、Java web设置session超时 二、session并发控制 三、退出/logout设置 前言 本文是继SSM项目集成Spring Security 4.X版本&#xff08;使用spring-security.xml 配置文件方式&#xff09;_spring security4.x 会话管理配置文件版-CSDN博客https://blog.csdn.ne…

6.Swift字面量

Swift 字面量 在 Swift 中&#xff0c;字面量是指直接指定数值、字符串、布尔值等常量的值的表示方式。使用字面量可以直接在代码中指定常量的值&#xff0c;而不需要通过变量或常量来存储。Swift 支持多种类型的字面量&#xff0c;包括整数、浮点数、布尔值、字符串、数组、字…

作业2024/2/6

第五章 静态成员与友元 一、填空题 1、一个类的头文件如下所示&#xff0c;num初始化值为5&#xff0c;程序产生对象T&#xff0c;且修改num为10&#xff0c;并使用show()函数输出num的值10。 #include <iostream.h> class Test { private: static int num; publi…

Oracle的权限

通过用户登录plsql工具后&#xff0c;如果在创建视图(或其他对象)时&#xff0c;没有指明视图或对象的用户&#xff0c;该视图或对象将直接创建在当前登录用户下。 GRANT SELECT ON user2.table1 TO user1;//将用户2的表1的select权限给用户1 GRANT ALL ON user2.table1 TO u…

DAY5 作业

1.TCP三次握手 2.TCP四次挥手 3.TCP和UDP的区别 相同点&#xff1a;都属于传输层的协议 不同点&#xff1a; TCP&#xff1a;1&#xff09;提供面向连接的&#xff0c;可靠的数据传输服务&#xff1b; 2&#xff09;传输过程中&#xff0c;数据无误&#xff0c;数据无丢失、数…

龙芯+RT-Thread+LVGL实战笔记(34)——密码锁初步

【写在前面】春节期间,本系列教程会不定期更新,毕竟这是一年当中最适合放下工作的时期。祝各位朋友新年大吉,身体健康。来年继续关注笔者和CSDN平台,收获更多的知识和技能。按照惯例,还是在开篇做一些声明: 有些硬件模块笔者并没有,如LED点阵、压力传感模块、RFID模块等…

【C++第二阶段】空指针访问成员函数常成员函数常成员属性

你好你好&#xff01; 以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 空指针访问成员函数常成员函数&常成员属性 空指针访问成员函数 类对象类型的空指针可以访问成员函数&#xff0c;但是不能够访问带有成员属性的成员函数。…

大数据调用链监控平台技术原理

一、AOP技术总结 二、监控逻辑动态织入原理 三、JVM动态织入流程 四、调用链监控平台技术简要总结 &#xff08;一&#xff09;、单服务的无感知自动日志埋点 jvm层面的字节码织入埋点&#xff0c;javaagent方式启动。 &#xff08;二&#xff09;、多服务调用链串联 trace…

transformer剪枝论文汇总

文章目录 NN Pruning摘要实验 大模型剪枝LLM-PrunerSparseGPT LTPVTPWidth & Depth PruningPatch SlimmingDynamicViTSPViTDynamicBERTViT SlimmingFastFormersNViTUVCPost-training pruning NN Pruning 《Block Pruning For Faster Transformers》 《为更快的transformer…

43、WEB攻防——通用漏洞任意文件下载删除重装敏读取黑白审计

文章目录 有关文件方面的漏洞&#xff1a;文件上传、文件包含和文件下载。 文件读取&#xff1a;基本和文件下载利用类似&#xff1b; 文件下载&#xff1a;利用下载获取源码或数据库配置文件及系统敏感文件为后续出思路。正常情况下&#xff0c;文件下载不能给一个路径就下&a…

关于TDSQL(MySQL)的简单知识分享

0. 前言 最近在系统改造过程中&#xff0c;接触到了国产分布式数据库TDSQL&#xff0c;记录一下关于TDSQL的部分知识点。 1. TDSQL简介 TDSQL是腾讯推出的一款兼容MySQL的自主可控、高一致性分布式数据库产品。 1.1 TDSQL优点&#xff1a; 数据强一致性高性能低成本线性水…

OPC UA客户端工具Softing OPC Client使用_推荐使用

OPC UA客户端工具Softing OPC Client使用_推荐使用 Softing OPC Client工具介绍 Softing OPC Client工具是德国Softing公司出品的标准OPC客户端。 是我数年来用过的最完备的OPC UA客户端工具。全部的数据类型都支持&#xff0c;功能齐备。 是查看或测试OPC服务器的最好工具了…

分布式事务解决方案AT模式

AT模式是Seata框架中的一种分布式事务解决方案&#xff0c;它利用两阶段提交&#xff08;2PC&#xff09;的概念&#xff0c;通过日志记录&#xff08;在undo_log中&#xff09;来实现在分布式系统中数据的一致性。AT模式可以解决分布式事务中的数据不一致问题&#xff0c;适合…

使用esp32 cam + SR602人体感应模块制作一个小型的监控

需求&#xff1a; 做一个小型的监控&#xff0c;类似电子猫眼&#xff0c;监测到人之后&#xff0c;取一张图 然后发送到自己的邮箱。 架构&#xff1a; 1.sr602 传感器监测到人 2. esp32 cam 取图 并通过mqtt协议传到远端服务器 3, 服务器利用python 搭建一个mqtt客户端&…