二叉树系列(遍历/dfs/bfs)10.10

一、二叉树的右视图(遍历)

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

(如果右子树为空的话,那么右视图中看到的就是左子树的节点)

bfs层序遍历:
思路:

需要用到一个队列,然后把每一层中的节点添加到队列中,遍历到最后一个节点的时候就是最右边的,添加到res中即可。

代码:
class Solution {public List<Integer> rightSideView(TreeNode root) {List<Integer> res=new ArrayList<>();Queue<TreeNode> queue=new ArrayDeque<>();if(root==null)return res;queue.add(root);while(!queue.isEmpty()){int size=queue.size();for(int i=0;i<size;i++){TreeNode cur=queue.poll();if(cur.left!=null)queue.add(cur.left);if(cur.right!=null)queue.add(cur.right);if(i==size-1)res.add(cur.val); }}return res;}
}
dfs右序遍历
思路:

因为题目中要求我们返回右视图的结果集。因此我们首先递归右子树,然后再去递归左子树。

如果右子节点一直存在的话,那么就一直往下dfs搜索,添加到res中;

如果右子节点为null的话,那么就向上返回,往左递归。注意这里要判断当前的深度和res的大小。只有depth==res.size()时,说明该层该元素是第一个访问的。

代码:
class Solution {List<Integer> res=new ArrayList<>();public List<Integer> rightSideView(TreeNode root) {dfs(root,0);return res;}public void dfs(TreeNode root,int depth){if(root==null)return;if(res.size()==depth){res.add(root.val);//每一层只能添加一个子节点}depth++;dfs(root.right,depth);dfs(root.left,depth);}
}

二、路经总和

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

思路:

1.首先题目要求我们的是从根节点到叶子节点,所以我们写终止条件的时候一定要写叶子结点的终止条件,如下:

if(root==null)return false;
if(root.left==null&&root.right==null)return targetSum==root.val;

我第一次写成了

if(root==null)return targetSum==0;

 这样就会导致和题意不符合,就不是根节点到叶子节点了。

2.然后,就向左右子节点遍历即可,但是要注意的是,要先判断左右子节点是否为空。

        boolean left=false;boolean right=false;if(root.left!=null)left=dfs(root.left,targetSum-root.val);if(root.right!=null)right=dfs(root.right,targetSum-root.val);
代码: 
class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {if(root==null)return false;return dfs(root,targetSum);}public boolean dfs(TreeNode root,int targetSum){if(root==null)return false;if(root.left==null&&root.right==null)return targetSum==root.val;boolean left=false;boolean right=false;if(root.left!=null)left=dfs(root.left,targetSum-root.val);if(root.right!=null)right=dfs(root.right,targetSum-root.val);return left||right;}
}

三、二叉树最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。

dfs深搜:
思路:

我们要找到根节点到叶子节点中的最短路径。那我们就要去判断每次遍历的节点。

如果是叶子节点,返回1;

如果是null,返回0;

如果左右节点有一个为空,那么就返回非空那边的深度;

如果两个都不为空,那么就返回其中的较小值。

代码:
class Solution {public int minDepth(TreeNode root) {if(root==null)return 0;int leftDepth=minDepth(root.left);int rightDepth=minDepth(root.right);//如果一边为空 或者都不为空if(root.left==null||root.right==null)return leftDepth+rightDepth+1;//如果两边都为空 就是一个叶子节点return Math.min(leftDepth,rightDepth)+1;}
}
bfs广搜:
思路:

层序遍历的思路

代码:
class Solution {public int minDepth(TreeNode root) {if(root==null)return 0;int res=0;Queue<TreeNode> queue=new ArrayDeque<>();queue.add(root);while(!queue.isEmpty()){int size=queue.size();res++;for(int i=0;i<size;i++){TreeNode cur=queue.poll();if(cur.left==null&&cur.right==null)return res;if(cur.left!=null)queue.add(cur.left);if(cur.right!=null)queue.add(cur.right);}}return res;}
}

四、求根节点到叶节点数字之和

给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。

每条从根节点到叶节点的路径都代表一个数字:

  • 例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。

计算从根节点到叶节点生成的 所有数字之和 。叶节点 是指没有子节点的节点。

思路:

如果遍历到第x个节点,我们需要把值求出来,然后传给下一个节点,下一个节点*10+root.val之后,再传给下一个节点。当遇到节点为叶子结点的时候,就返回值。

代码:
public int dfs(TreeNode node,int cur){if(node==null)return 0;int newCur=cur*10+node.val;if(node.left==null&&node.right==null)return newCur;int leftNum=dfs(node.left,newCur);int rightNum=dfs(node.right,newCur);return leftNum+rightNum;}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

IPguard与Ping32 DLP能力对比,保护企业数据的最佳选择

在信息安全的背景下&#xff0c;数据丢失防护&#xff08;DLP&#xff09;解决方案已成为企业不可或缺的一部分。IPguard和Ping32是市场上两款功能强大的DLP产品。本文将对它们的DLP能力进行详细对比&#xff0c;帮助企业找到最适合自己的数据保护工具。 Ping32的独特之处 Pin…

java复制查询数组-cnblog

java数组 复制数组 copyOf(待复制数组,复制后新数组的长度) 如果复制后数组的长度&#xff0c;长于原来数组&#xff0c;多出来的元素会被补0&#xff0c;如果新数组元素少会从第一个元素&#xff0c;取到指定元素长度 package nb;import java.util.Arrays;public class co…

2024年,有多少程序员被迫转行?真是惨烈啊!

知乎有个很火热的帖子&#xff0c;很多人在讨论今年有多少程序员在被迫转行&#xff0c;原来今年的程序员这么难。 有个老哥说自己干了8年前端程序员&#xff0c;今年被裁之后&#xff0c;薪资从30K降到25K还是没找到工作&#xff0c;现在只能转行去卖保险。 还有一个38岁的老哥…

深度解析|生成式人工智能大模型备案全流程

一、大模型备案的含义 根据《生成式人工智能服务管理暂行办法》第十七条 提供具有舆论属性或者社会动员能力的生成式人工智能服务的&#xff0c;应当按照国家有关规定开展安全评估。这里所说的按照国家有关规定开展安全评估&#xff0c;其实就是生成式人工智能服务备案&#x…

Python_网络编程(IP 端口 协议)

网络编程&#xff1a; 互联网时代&#xff0c;现在基本上所有的程序都是网络程序&#xff0c;很少有单机版的程序了。网络编程就是如何在程序中实现两台计算机的通信。Python语言中&#xff0c;提供了大量的内置模块和第三方模块用于支持各种网络访问&#xff0c;而且Python语言…

JAVA毕业设计187—基于Java+Springboot+vue3的电动车销售管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3的电动车销售管理系统(源代码数据库)187 一、系统介绍 本项目前后端分离(可以改为ssm版本)&#xff0c;分为用户、管理员两种角色 1、用户&#xff1a; 注…

不用PS!patchwork快速解决多子图组合问题~~

如果现在你还是将自己制作的图表放在PS或者PPT中进行随意组合的化&#xff0c;那么这篇文章你就得好好看看了&#xff0c;今天小编就给大家安利一个超强的突变自由组合包-patchwork&#xff0c;让你轻松实现多图的自由组合。 更多详细的数据可视化教程&#xff0c;可订阅我们的…

科研绘图系列:R语言绘制中国地理地图

文章目录 介绍加载R包导入数据图a图b图c图d系统信息介绍 文章提供了绘制图a,图b和图d的数据和代码。该图展示了不同省份的物种分布情况。 加载R包 library(geojsonsf) library(sf) library(ggplot2) library(RColorBrewer) library(ggspatial) library(</

Springboot网上书城小程序—计算机毕业设计源码38707

目 录 摘要 1 绪论 1.1 研究背景及意义 1.2国内外研究现状 1.3系统开发的内容 1.4论文结构与章节安排 1.5小程序框架以及目录结构介绍 2 网上书城小程序系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统功能分析…

PowerJob做定时任务调度

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、区别对比二、使用步骤1. 定时任务类型2.PowerJob搭建与部署 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; PowerJob是基于java开…

Android SELinux——安全策略(三)

SELinux 通过严格的访问控制机制增强了 Linux 系统的安全性。它通过标签和安全策略来控制进程和文件的访问权限&#xff0c;从而保护系统免受未经授权的访问和攻击。 一、策略介绍 1、主要组件 安全标签&#xff08;Security Labels&#xff09;&#xff1a;每个文件、目录、…

Nginx中,413 Request Entity Too Large错误

背景 在Nginx中&#xff0c;413 Request Entity Too Large错误通常发生在尝试上传或发送超过Nginx配置文件中的client_max_body_size限制的文件时。这个错误意味着请求的正文大小超过了Nginx允许的最大值。 解决这个问题的方法是在Nginx配置文件中增加client_max_body_size的值…

运动耳机选哪个品牌比较好?盘点五大高品质运动耳机推荐!

在骨传导耳机日益普及的同时&#xff0c;一个不容忽视的问题也逐渐暴露在大众视野之中。根据可靠消息&#xff0c;有超过九成的运动爱好者反馈在使用骨传导耳机时感到佩戴不适&#xff01;作为一名有着5年经验的运动达人&#xff0c;我秉持着对消费者负责的态度&#xff0c;同时…

【力扣刷题实战】(顺序表)移除元素

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 力扣题目&#xff1a; 移除元素 题目描述 示例 1&#xff1a; 示例 2&#xff1a; 解题思路 具体思路 题目要点 完整代码 兄弟们共勉 &#xff01;&#xff01;&#xff01; 每篇前言 博客主页&#xff1a;小卡…

【新品发布】数字能源EMS管理再掀新篇章

致远电子EM系列工商业储能网关累计装机容量突破2GWh&#xff01;聚焦数字综合能源应用&#xff0c;全新一代EM-800/EM-1000G发布&#xff0c;见证光储充时代的来临&#xff01; 早在2008年&#xff0c;致远电子的工程师在为国内某新能源企业设计光伏通讯管理机方案时&#xff0…

Leetcode 50. Pow ( x , n ) 快速幂、取模 C++实现

问题&#xff1a;Leetcode 50. Pow ( x , n ) 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数。 算法&#xff1a; 具体实现流程如下&#xff1a; 代码&#xff1a; class Solution { public:double myPow(double x, int N) {double ans 1;long long n N;if (n <…

研究生异地报名,需要社保缴费记录,没有社保记录怎么办。

1、户籍在安徽省&#xff0c;在北京工作&#xff0c;想报北京科技大学&#xff1b; 招生简章中没有提社保记录&#xff0c;但是在报名的时候&#xff0c;又出来要求&#xff1a;北京连续6个月的社保记录。这里是指在北京市考试的要求。没有连续社保缴费记录&#xff0c;肯定不能…

软考《信息系统运行管理员》- 4.1信息系统软件运维概述

4.1信息系统软件运维概述 信息系统软件运维的概念 信息系统软件运维是指信息系统软件在开发完成投入使用后&#xff0c;对信息系统软件进行的改正 性维护、适应性维护、完善性维护、预防性维护等软件工程活动。 信息系统软件的可维护性及维护类型 信息系统软件维护工作直接…

dvwa:sql注入、sql盲注全难度解析

sql注入 easy 单引号闭合 id2 and if(11,sleep(3),1) and 11 ​ 联合注入&#xff1a; id2 union select database(),user() -- ​ 报错注入&#xff1a; id2 and updatexml(1,concat(0x7e,database(),0x7e),1) -- medium mysql_real_escape_string() 调用 mysql 库的函数 mys…

gbase8s的事务、并发控制、锁机制、隔离级别

一、事务概念 事务是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成&#xff0c;否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元&#xff0c;可以简化错误恢复并使应用程序更…