代码随想录:二叉树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,一经查实,立即删除!

相关文章

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…

GRASSHOPPER电池Expression

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

OpenUI在windows下部署使用

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

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

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

账号安全及应用

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

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;、中银国际、中信证…

C++初阶学习第三弹——类与对象(上)——初始类与对象

前言&#xff1a; 在前面&#xff0c;我们已经初步学习了C的一些基本语法&#xff0c;比如内敛函数、函数重载、缺省参数、引用等等&#xff0c;接下来我们就将正式步入C的神圣殿堂&#xff0c;首先&#xff0c;先给你找个对象 目录 一、类与对象是什么&#xff1f; 二、类的各…

Git 工作原理

Git 工作原理 | CoderMast编程桅杆https://www.codermast.com/dev-tools/git/git-workspace-index-repo.html Workspace&#xff1a;工作区Index / Stage&#xff1a;暂存区Repository&#xff1a;仓库区&#xff08;或本地仓库&#xff09;Remote&#xff1a;远程仓库 Git 一…

T1级,生产环境事故—Shell脚本一键备份K8s的YAML文件

大家好&#xff0c;我叫秋意零。 最近对公司进行日常运维工作时&#xff0c;出现了一个 T1 级别事故。导致公司的“酒云网”APP的无法使用。我和我领导一起搞了一个多小时&#xff0c;业务也停了一个多小时。 起因是&#xff1a;我的部门直系领导&#xff0c;叫我**删除一个 …

数据结构练习-线性表的顺序存储

----------------------------------------------------------------------------------------------------------------------------- 1. 具有n个元素的线性表采用顺序存储结构&#xff0c;在其第i个位置插入一个新元素的算法间复杂度为 ( )(1≤i≤n1) 。 …

干货:一篇文章让你掌握用户运营 沈阳新媒体运营培训

用户对于产品的重要性不言而喻&#xff0c;而用户运营作为最接近用户的一环&#xff0c;自然而然受到了各大互联网公司的重视。想要掌握用户运营&#xff0c;必须得先知道其市场需求和主要技能&#xff0c;本文从这两个方面对用户运营展开了分析拆解&#xff0c;梳理用户运营的…

实现printf功能代码效果

1、使用 vsnprintf 模拟 printf 功能 非宏定义情境下&#xff0c;可以用作开启通讯口调试功能 实际上是通过 vsnprintf 将接收到的 format格式化后解析到缓存区&#xff0c;这里存在缓存区大小限制&#xff0c;以及代码大小区别 #include <stdarg.h> #include "std…

不墨迹,向媒体投稿不讲攻略,直接上方法

作为一名单位信息宣传员,我曾深陷于向媒体投稿的泥沼之中,饱尝了费时费力、审核严苛、出稿缓慢的苦涩,承受着领导急切期盼与自我压力交织的煎熬。然而,当我有幸接触到智慧软文发布系统,这一切困境如同阴霾散去,取而代之的是便捷流畅的投稿流程,以及领导满意、团队轻松的工作氛围…

parallels desktop 19密钥分享 附PD虚拟机安装教程 支持M/intel

PD19虚拟机安装破解教程 Parallels Desktop 百度网盘下载&#xff1a;https://pan.baidu.com/s/1ezQmJAjIx796NEr9WZbcOg 提取码: 8w61 &#xff08;地址容易失效&#xff0c;来之不易&#xff0c;务必点赞和收藏&#xff0c;如果失效了请到评论区留言反馈&#xff09; 注意&…

VPP 源码学习总结

当我们在VPP/plugins目录下注册了自己的node后&#xff0c; 肯定有一个node.func(), 那这个函数是如何执行到的呢&#xff1a; 1. 首先我们要看一下这个插件注册的时候做了什么&#xff0c; 假设node 如下&#xff1a; 编译成功后&#xff0c; 我们可以从函数vlib_plugin_earl…

Telegram mini app 登录小部件 | 自定义登录按钮 或 静默登录

先说我遇到的问题&#xff0c;我按照流程接入了 telegram 登录小部件&#xff0c;在 PC 或者 H5 可以拿到数据&#xff08;不管是选择回调函数还是回调地址的形式都可以&#xff09;&#xff0c;但是在 telegram mini app 中登录拿不到数据&#xff0c;在 telegram 中 我点击登…