代码随想录第十六天| 513.找树左下角的值 、112. 路径总和 、113. 路径总和 II、106、从中序与后序遍历序列构造二叉树

513. 找树左下角的值

题目描述

给定一个二叉树,找到树的最后一行最左边的节点值。

解题思路
  1. 深度优先遍历 (DFS):使用深度优先遍历来查找树的左下角值。
  2. 记录最大深度:定义 maxDepth 变量,用于记录遍历时的最大深度。
  3. 更新左下角节点值:在每次到达叶子节点时,判断当前深度是否大于 maxDepth,如果是,则更新 maxDepth 和结果 result,保存当前节点值为最左下角的节点值。
  4. 回溯:在递归中回溯深度值 depth,避免对其他分支的影响。
代码实现
class Solution {public int maxDepth = -1;int result;public int findBottomLeftValue(TreeNode root) {traversal(root,0);return result;}public void traversal(TreeNode root,int depth) {if(root.left == null && root.right==null){if(depth>maxDepth){maxDepth = depth;result = root.val;}}if(root.left != null){depth++;traversal(root.left,depth);depth--;}if(root.right != null){depth++;traversal(root.right,depth);depth--;}}
}
  1. 路径总和

112. 路径总和

题目描述

给定一个二叉树和一个目标和 targetSum,判断该树中是否存在一条从根节点到叶子节点的路径,使得路径上所有节点值的和等于目标和。

解题思路
  1. 递归减去节点值:每次递归进入一个节点时,将当前节点值从 targetSum 中减去。
  2. 判断叶子节点:当到达叶子节点时,如果 targetSum 减到0,说明找到了符合条件的路径,返回 true
  3. 左右子树递归:如果当前节点不是叶子节点,递归地检查其左右子树是否存在满足条件的路径。
  4. 短路逻辑:在递归过程中,如果找到符合条件的路径,立即返回 true,否则最终返回 false
代码实现
class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {if (root == null) {return false;}targetSum -= root.val;if(root.left == null && root.right == null && targetSum ==0){return true;}if(root.left == null && root.right == null && targetSum !=0){return false;}if(root.left != null){boolean left = hasPathSum(root.left,targetSum);if(left)return left;}if(root.right != null){boolean right = hasPathSum(root.right,targetSum);if(right)return right;}return false;}
}

113. 路径总和 II

题目描述

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

解题思路
  1. 递归深度优先遍历:使用递归的深度优先搜索 (DFS) 来遍历二叉树,从根节点开始,到达叶子节点。
  2. 路径存储:在遍历的过程中使用 path 列表保存当前路径中的节点。
  3. 判断叶子节点:每当到达叶子节点时,判断当前路径总和是否等于 targetSum。如果满足条件,将当前路径的一个拷贝添加到结果 res 中。
  4. 回溯:每次递归返回上层节点时,移除 path 中的最后一个节点,确保在遍历其他路径时路径正确。
代码实现
class Solution {public List<List<Integer>> pathSum(TreeNode root, int targetsum) {List<List<Integer>> res = new ArrayList<List<Integer>>();if(root==null){return res;}List<Integer> path = new LinkedList<>();preorderdfs(root, targetsum, res, path);return res;}public void preorderdfs(TreeNode root, int targetsum, List<List<Integer>> res, List<Integer> path){path.add(root.val);if(root.left==null&&root.right==null){if(targetsum-root.val==0){res.add(new ArrayList<>(path));}return;}if(root.left != null){preorderdfs(root.left,targetsum-root.val, res, path);path.remove(path.size()-1);}if(root.right != null){preorderdfs(root.right,targetsum-root.val, res, path);path.remove(path.size()-1);}}
}

106. 从中序与后序遍历序列构造二叉树

题目:根据一棵树的中序遍历与后序遍历构造二叉树。

注意:你可以假设树中没有重复的元素。


解题思路

  1. 后序遍历的最后一个元素是树的根节点。
  2. 在中序遍历中找到根节点位置,从而分割出左右子树的中序序列。
  3. 根据左右子树的大小,在后序序列中划分出左右子树的后序序列。
  4. 递归构造左右子树,直至构造完成。

代码

class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) {if(postorder.length == 0 || inorder.length==0){return null;}return bulidHelper(inorder,0,inorder.length,postorder,0,postorder.length);}private TreeNode bulidHelper(int[] inorder, int inorderStart, int inorderEnd, int[] postorder, int postorderStart, int postorderEnd){if(postorderStart==postorderEnd){return null;}int rootVal = postorder[postorderEnd-1];TreeNode root = new TreeNode(rootVal);int middleIndex;for(middleIndex=inorderStart;middleIndex<inorderEnd;middleIndex++){if(inorder[middleIndex]==rootVal)break;}int leftinorderStart = inorderStart;int leftinorderEnd = middleIndex;int leftpostorderStart = postorderStart;int leftpostorderEnd = postorderStart+middleIndex-inorderStart;int rightinorderStart = middleIndex+1;int rightinorderEnd = inorderEnd;int rightpostorderStart = postorderStart+middleIndex-inorderStart;int rightpostorderEnd = postorderEnd-1;root.left = bulidHelper(inorder,leftinorderStart,leftinorderEnd,postorder,leftpostorderStart,leftpostorderEnd);root.right = bulidHelper(inorder,rightinorderStart,rightinorderEnd,postorder,rightpostorderStart,rightpostorderEnd);return root;}}

105.从前序与中序遍历序列构造二叉树

题目:根据一棵树的中序遍历与前序遍历构造二叉树。

注意:你可以假设树中没有重复的元素。


解题思路

  1. 后序遍历的最后一个元素是树的根节点。
  2. 在中序遍历中找到根节点位置,从而分割出左右子树的中序序列。
  3. 根据左右子树的大小,在后序序列中划分出左右子树的后序序列。
  4. 递归构造左右子树,直至构造完成。

class Solution {public TreeNode buildTree(int[] preorder, int[] inorder) {if(preorder.length == 0 || inorder.length ==0){return null;}return helper(preorder,0,preorder.length, inorder,0,inorder.length);}private TreeNode helper(int[] preorder,int preorderstart,int preorderend, int[] inorder,int inorderstart,int inorderend){if(preorderstart == preorderend){return null;}int rootval = preorder[preorderstart];TreeNode root =new TreeNode(rootval);int midval;for(midval = inorderstart;midval<inorderend;midval++){if(inorder[midval]==rootval)break;}int leftpreorderstart = preorderstart+1;int leftpreorderend = preorderstart+midval-inorderstart+1;int leftinorderstart = inorderstart;int leftinorderend = midval;int rightpreorderstart = preorderstart+midval-inorderstart+1;int rightpreorderend = preorderend;int rightinorderstart = midval+1;int rightinorderend = inorderend;root.left = helper(preorder,leftpreorderstart,leftpreorderend, inorder,leftinorderstart,leftinorderend);root.right = helper(preorder,rightpreorderstart,rightpreorderend, inorder,rightinorderstart,rightinorderend);return root;}
}

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

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

相关文章

triangle_area_calculators库发布

最近将在pip网站上发布triangle_area_calculators库&#xff08;我编写的python第三方库&#xff09; triangle_area_calculators库用于计算不同类型及不同已知量的三角形面积 在triangle_area_calculators库中&#xff0c;有一个名为TriangleAreaCalculators的类 可以通过f…

分布式数据库:核心概念、架构设计及应用实践

随着互联网和大数据技术的迅猛发展&#xff0c;传统单体数据库架构在处理大规模数据、支持高并发访问方面面临严峻挑战。分布式数据库应运而生&#xff0c;以其高可用性、扩展性和容错能力&#xff0c;逐渐成为现代化企业数据库架构的主流选择。本文将系统性地介绍分布式数据库…

2024年北京海淀区中小学生信息学竞赛校级预选赛试题

2024年北京海淀区中小学生信息学竞赛校级预选赛试题 题目总数&#xff1a;24 总分数&#xff1a;100 编程基础知识单选题 第 1 题 单选题 关于 2024年海淀区信息学竞赛的描述错误的是( ) A.报名在网上报名系统进行 B.必须经过学籍所在学校的指导教师审核 C.学校…

软件测试学习笔记丨Vue常用指令-输入绑定(v-model)

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/23461 指令 指令是将一些特殊行为应用到页面DOM元素的特殊属性 格式都是以v-开始的&#xff0c;例如&#xff1a; v-model&#xff1a;双向绑定v-if和v-else&#xff1a;元素是否存在v-sho…

PySpark 本地开发环境搭建与实践

目录 一、PySpark 本地开发环境搭建 &#xff08;一&#xff09;Windows 本地 JDK 和 Hadoop 的安装 &#xff08;二&#xff09;Windows 安装 Anaconda &#xff08;三&#xff09;Anaconda 中安装 PySpark &#xff08;四&#xff09;Pycharm 中创建工程 二、编写代码 …

解决 Spring 异步处理中的 JDK 动态代理问题及相关错误分析

解决 Spring 异步处理中的 JDK 动态代理问题及相关错误分析 遇到的问题&#xff1a; 在使用 Spring 的 Async 注解开启异步处理时&#xff0c;遇到以下错误&#xff1a; The bean ServiceImplChannel could not be injected as a com.wn.order.pay.recharge.controller.Serv…

UI自动化测试 —— CSS元素定位实践!

前言 自动化测试元素定位是指在自动化测试过程中&#xff0c;通过特定的方法或策略来准确识别和定位页面上的元素&#xff0c;以便对这些元素进行进一步的操作或断言。这些元素可以是文本框、按钮、链接、图片等HTML页面上的任何可见或不可见的组件。 在自动化测试中&#xf…

封装一个请求的hook(react函数组件)

对于后台系统&#xff0c;上面筛选&#xff0c;下面表格分页的页面&#xff0c;这个hook非常实用 omitBy方法&#xff1a;过滤不为undefined的对象属性 export const omitBy <T extends IObject, K extends keyof T>(object:T, predicate:(value:T[K]) > boolean):I…

AI大模型重塑软件开发:流程、优势、挑战与展望

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

一篇文章教会你,Pycharm 的常用配置及快捷键~

每一位Python开发者都熟悉PyCharm这个强大的IDE&#xff0c;它提供了丰富的功能来提高编程效率。但你是否充分利用了PyCharm的所有配置和快捷键&#xff1f;今天&#xff0c;我们就来深度剖析PyCharm的常用配置和快捷键&#xff0c;让你从入门到精通&#xff0c;提升编程效率&a…

聚划算!Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型多变量回归预测

聚划算&#xff01;Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型多变量回归预测 目录 聚划算&#xff01;Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 聚划算&#xff01;Tran…

【网络安全】|kali中安装nessus

1、使用 df -h 命令查看磁盘使用情况&#xff0c;确保磁盘容量大于40G 简单粗暴办法&#xff1a;重装系统&#xff0c;装系统中注意磁盘空间相关的选项 //磁盘扩容&#xff1a;https://wiki.bafangwy.com/doc/670/ 2、安装 nessus 安装教程 https://blog.csdn.net/Cairo_A/a…

sqlserver、达梦、mysql调用存储过程(带输入输出参数)

1、sqlserver&#xff0c;可以省略输出参数 --sqlserver调用存储过程&#xff0c;有输入参数&#xff0c;有输出参数--省略输出参数 exec proc_GetReportPrintData 1, , , 1--输出参数为 null exec proc_GetReportPrintData 1, , , 1, null--固定输出参数 exec proc_GetReport…

要在微信小程序中让一个 `view` 元素内部的文字水平垂直居中,可以使用 Flexbox 布局

文章目录 主要特点&#xff1a;基本用法&#xff1a;常用属性&#xff1a; 要在微信小程序中让一个 view 元素内部的文字水平垂直居中&#xff0c;可以使用 Flexbox 布局。以下是如何设置样式的示例&#xff1a; .scan-button {display: flex; /* 启用 Flexbox 布局 */justify…

Java基础-I/O流

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 字节流 定义 说明 InputStream与OutputStream示意图 说明 InputStream的常用方法 说明 OutputStrea…

【Linux】简易版shell

文章目录 shell的基本框架PrintCommandLineGetCommandLineParseCommandLineExecuteCommandInitEnvCheckAndExecBuildCommand代码总览运行效果总结 shell的基本框架 要写一个命令行我们首先要写出基本框架。 打印命令行获取用户输入的命令分析命令执行命令 基本框架的代码&am…

Java项目实战II基于Java+Spring Boot+MySQL的网上摄影工作室(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着互联网…

宝塔Linux面板安装PHP扩展失败报wget: unable to resolve host address ‘download.bt.cn’

一、问题&#xff1a; 当使用宝塔面板安装PHP扩展失败出现如下错误时 Resolving download.bt.cn(download.bt.cn)...failed: Connection timed out. wget: unable toresolve host address download.bt.cn’ 二、解决&#xff1a; 第一步&#xff1a;如下命令执行拿到返回的I…

攻防靶场(28):通过SNMP进行信息收集 JOY

目录 1.侦查 1.1 获取目标网络信息&#xff1a;IP地址 1.2 主动扫描&#xff1a;扫描IP地址块 1.3 收集受害者主机信息&#xff1a;软件 2. 数据窃取 2.1 通过备用协议窃取&#xff1a;通过未加密的非C2协议窃取 2.2 通过备用协议窃取&#xff1a;通过未加密的非C2协议窃取 3. …

LeetCode:83. 删除排序链表中的重复元素 II(java) 保留一个重复的

目录 题目描述: 代码: 第一种: 第二种: 题目描述: 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2]示例 2&#xff1a…