代码随想录:二叉树15-17

目录

404.左叶子之和

题目

代码(后序递归)

代码(前序迭代)

513.找树左下角的值

题目

代码(层序迭代)

112.路径总和

题目

代码(前序迭代)

112.路径总和II

题目

代码(前序迭代)


404.左叶子之和

题目

给定二叉树的根节点 root ,返回所有左叶子之和。

示例 1:

输入: root = [3,9,20,null,null,15,7] 
输出: 24 
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

示例 2:

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

代码(后序递归)

class Solution {public int sumOfLeftLeaves(TreeNode root) {//终止条件if(root == null){return 0;}//单层逻辑int left = sumOfLeftLeaves(root.left);int right = sumOfLeftLeaves(root.right);int mid = 0;if(root.left != null && root.left.left == null && root.left.right == null){mid = root.left.val;}return mid + left + right;}
}

代码(前序迭代)

class Solution {public int sumOfLeftLeaves(TreeNode root) {Stack<TreeNode> stack = new Stack<>();int res = 0;if(root == null){return 0;}stack.push(root);while(!stack.isEmpty()){TreeNode cur = stack.pop();if(cur.right != null){stack.push(cur.right);}if(cur.left != null){stack.push(cur.left);//如果cur有左孩子,且左孩子是叶子if(cur.left.left == null && cur.left.right == null){res += cur.left.val;}}}return res;}
}

513.找树左下角的值

题目

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。

假设二叉树中至少有一个节点。

示例 1:

输入: root = [2,1,3]
输出: 1

代码(层序迭代)

class Solution {public int findBottomLeftValue(TreeNode root) {//其实就是找最后一层的第一个节点Queue<TreeNode> que = new ArrayDeque<>();que.offer(root);int res = 0;while(!que.isEmpty()){int size = que.size();//处理单层节点for(int i=0; i < size; i++){TreeNode cur = que.poll();//下一层节点入队if(cur.left != null){que.offer(cur.left);}if(cur.right != null){que.offer(cur.right);}//是这一层的第一个节点if(i == 0){res = cur.val;}}}return res;}
}

112.路径总和

题目

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。

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

示例 1:

输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。

代码(前序迭代)

class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {if(root == null){return false;}//前序遍历二叉树Stack<TreeNode> nodestack = new Stack<>();//保留前序遍历到每个节点的路径值Stack<Integer> sumstack = new Stack<>();//保留所有到叶子节点的路径值List<Integer> list = new ArrayList<>();//根节点进栈nodestack.push(root);sumstack.push(root.val);while(!nodestack.isEmpty()){TreeNode cur = nodestack.pop();int sum = sumstack.pop();if(cur.right != null){nodestack.push(cur.right);sumstack.push(sum + cur.right.val);}if(cur.left != null){nodestack.push(cur.left);sumstack.push(sum + cur.left.val);}//cur是叶子节点,把sum加到list路径和集合中if(cur.left == null && cur.right == null){list.add(sum);}}if(list.contains(targetSum)){return true;}else{return false;}}
}

112.路径总和II

题目

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。

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

示例 1:

输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]

代码(前序迭代)

class Solution {public List<List<Integer>> pathSum(TreeNode root, int targetSum) {//list存放函数最后返回值List<List<Integer>> result = new ArrayList<>();//用于前序迭代遍历二叉树Stack<TreeNode> nodestack = new Stack<>();//记录前序迭代对应的路径和Stack<Integer> sumstack = new Stack<>();//记录前序迭代对应的路径列表Stack<ArrayList<Integer>> pathstack = new Stack<>();if(root == null){return result;}nodestack.push(root);sumstack.push(root.val);//创建根节点对应的path列表ArrayList<Integer> rootpath = new ArrayList<>();rootpath.add(root.val);pathstack.push(rootpath);while(!nodestack.isEmpty()){TreeNode cur = nodestack.pop();int sum = sumstack.pop();ArrayList<Integer> path = pathstack.pop();//如果当前cur是叶子节点,且sum满足,把path加入结果集中if(sum == targetSum && cur.left == null && cur.right == null){result.add(path);}//处理右孩子if(cur.right != null){nodestack.push(cur.right);  //右孩子节点入栈sumstack.push(sum + cur.right.val);  //新的sum入栈ArrayList<Integer> newpath = new ArrayList<>(path); //创建path的副本newpath.add(cur.right.val); pathstack.push(newpath);}if(cur.left != null){nodestack.push(cur.left);sumstack.push(sum + cur.left.val);ArrayList<Integer> newpath = new ArrayList<>(path);newpath.add(cur.left.val);pathstack.push(newpath);}}return result;}
}

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

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

相关文章

记录如何用php将多个字符替换成同一个字符

在PHP中&#xff0c;如果你想要将多个不同的字符替换成同一个字符&#xff0c;可以使用str_replace()函数。这个函数可以接收一个包含需要被替换的字符的数组&#xff0c;以及一个表示替换目标的字符串。 以下是使用str_replace()进行多字符替换的基本示例&#xff1a; $text…

Linux读写文件

前言 学习了文件系统&#xff0c;就能理解为什么说Linux下一切皆文件。 语言层面的操作 在c语言的学习中我们可以使用fopen()函数对文件进行操作。 int main() {//FILE * fp fopen("./log.txt", "w");//FILE * fp fopen("./log.txt", "…

TablePlus for Mac/Win:开启高效数据开发新纪元

在当今数字化时代&#xff0c;数据的重要性日益凸显。无论是企业还是个人&#xff0c;都需要一款强大而实用的本地原生数据开发软件来提升工作效率。而 TablePlus for Mac/Win 正是这样一款卓越的工具&#xff0c;它为用户带来了全新的体验&#xff0c;让数据开发变得更加轻松、…

第1次作业

目录 重点内容提要一、误差度量二、浮点数系统三、误差传播四、数值稳定性 作业解析 重点内容提要 一、误差度量 二、浮点数系统 三、误差传播 四、数值稳定性 作业解析

快速部署 Garnet

快速部署 Garnet Garnet 是 Microsoft Research 推出的一种新型远程缓存存储&#xff0c;其设计速度极快、可扩展且延迟低。 Garnet 在单个节点内是线程可扩展的。它还支持分片集群执行、复制、检查点、故障转移和事务。它可以在主内存以及分层存储&#xff08;例如 SSD 和 Az…

2024/4/25 红外遥控代码

51完结撒花&#xff01;&#xff01;&#xff01; 这块如果IR听不懂可以看看那个状态机的相关视频。 Int0.c #include <REGX52.H>void Int0_Init(void) {IT01;IE00;EX01;EA1;PX01; }//void Int0_Routine(void) interrupt 0 //{ // Num; //} Timer0.c #include …

C#中=> “Lambda运算符”

在C#中&#xff0c;> 符号被称为“Lambda运算符”或“Lambda箭头”。它用于连接Lambda表达式中的参数列表和表达式主体&#xff0c;表示函数的输入和输出关系。因此&#xff0c;Lambda运算符充当了将参数映射到表达式的箭头。 Lambda运算符的左侧是参数列表&#xff0c;它们…

GRASSHOPPER电池Expression

Grasshopper中如果要实现简单的条件if语句的效果&#xff0c;可以使用电池Expression。 举例&#xff1a;获取两个数的差值&#xff0c;永远用大数减去小数

代码随想录算法训练营day45

70. 爬楼梯 &#xff08;进阶&#xff09; 五部曲&#xff1a; dp数组下标及含义&#xff1a;爬到有i个台阶的楼顶&#xff0c;有dp[i]种方法dp数组初始化&#xff1a;dp[0]1递推公式&#xff1a;dp[i] dp[i - j]遍历方向&#xff1a;target放在外循环&#xff0c;将nums放在…

OpenUI在windows下部署使用

OpenUI OpenUI是一个基于Python的AI对话平台&#xff0c;支持接入多种AI模型。 通过聊天的方式来进行UI设计&#xff0c;你可以通过文字来描述你想要的UI界面&#xff0c;OpenUI可以帮你实时进行渲染出效果 安装OpenUI 这里预设你的电脑上已安装git、Python和pip&#xff0…

Migrations

Entity Framework的Migrations工具是一个版本控制和数据库迁移的系统&#xff0c;它允许开发者以编程方式管理数据库模式的变更。 在使用Entity Framework时&#xff0c;开发者可以通过代码先行&#xff08;Code First&#xff09;的方式定义数据模型&#xff0c;然后使用Migr…

OSI网络七层协议<随手笔记>

1.OSI OSI&#xff08;Open System Interconnect&#xff09;&#xff0c;即开放式系统互连。 一般都叫OSI参考模型&#xff0c;是ISO组织在1985年研究的网络互连模型。该体系结构标准定义了网络互连的七层框架&#xff08;物理层、数据链路层、网络层、传输层、会话层、表示层…

关于腾讯云ocr银行卡识别报错url_1.URL is not a constructor

使用腾讯云进行ocr银行卡识别报错url_1.URL is not a constructor的问题各位怎么解决的能否留言告知一二 在线代码调试可以&#xff0c;但是js使用报错url_1.URL is not a constructor export function ocr(dataUrl){//dataUrl已转换为base64// Depends on tencentcloud-sdk-n…

账号安全及应用

一、账号安全控制 1.1系统账号清理 将用户设置为无法登陆 锁定账户 删除账户 设定账户密码&#xff0c;本质锁定 锁定配置文件-chattr&#xff1a; -a 让文件或目录仅供附加用途。只能追加 -i 不得任意更动文件或目录。 1.2密码安全控制 chage 1.3历史命令 history&am…

练习-字符串逆序统计

需求 完成字符串的逆序以及统计 设计一个程序&#xff0c;要求只能输入长度低于31的字符串&#xff0c;否则提示用户重新输入 打印如下内容: 您输入的字符串:abcabc 长度:6 逆序后为:cbacba 字符统计结果:{a: 2, b: 2, c: 2} 分析 1. 输入字符串(while循环) 2. 字符串长度小…

考研数学精选题目015

题目 lim ⁡ n → ∞ sin ⁡ [ π ln ⁡ ( 2 n 1 ) − ln ⁡ ( 2 n ) ] \mathop {\lim }\limits_{n \to \infty } \sin \left[ {{\pi \over {\ln \left( {2n 1} \right) - \ln \left( {2n} \right)}}} \right] n→∞lim​sin[ln(2n1)−ln(2n)π​] 来源 东南大学真题 证明 li…

Oracle数据库锁表问题解决指南:查询、释放与监控

在Oracle数据库管理中&#xff0c;处理锁表问题和查询正在运行的SQL是常见的任务。以下是针对这些需求的详细解析和操作步骤。 1. 查询锁定的表和对应会话 当数据库中出现性能问题或某些操作无法完成时&#xff0c;首先需要确认是否有锁表现象。以下SQL查询可以帮助你识别当前…

Clickhouse离线安装教程

https://blog.51cto.com/u_15060531/4174350 1. 前置 1.1 检查服务器架构 服务器&#xff1a;Centos7.X 需要确保是否x86_64处理器构架、Linux并且支持SSE 4.2指令集 grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 …

怡宝母公司冲刺上市:产能未满仍要募资扩产,突击分红25亿元

又一家瓶装水企业冲刺上市。 近日&#xff0c;怡宝母公司华润饮料&#xff08;控股&#xff09;有限公司&#xff08;下称“华润饮料”&#xff09;递交招股书&#xff0c;准备在港交所主板上市&#xff0c;BofA securities&#xff08;美银证券&#xff09;、中银国际、中信证…

07.OSPF的七种LSA类型

OSPF的LSA类型 在OSPF协议中,使用LSA来传递路由信息和拓扑信息,因此了解不同的LSA的内容和其功能,对了解OSPF协议的路由形成有很大帮助。这里的OSPF是v2版本,只针对IPv4来讲。 描述一条LSA的三要素: ADV Router产生者路由器、link-ID 链路标识符、LSA类型。 LSA1:每个OS…