双非二本找工作前的准备day20(算法-二叉树系列)

学习目标:

每天复习代码随想录上的题目1-2道算法(时间充足可以继续)

今日碎碎念:

1)今天开始是二叉树系列

2)出租屋里不知道干啥,看看书啊刷刷算法,打打游戏,学学技术啥的,不让自己太闲着才行。

3)天天都是吃外卖,不出门了都,后续等到9号回来之后继续开始整理八股(以复习为主)。


力扣刷题

算法

力扣102:102. 二叉树的层序遍历

dfs做法

class Solution {//结果集public List<List<Integer>> res = new ArrayList<List<Integer>>();public List<List<Integer>> levelOrder(TreeNode root) {dfs(root,0);return res;}//dfs方式public void dfs(TreeNode node,Integer deep){if(node == null) return;//记录深度deep++;//开始将遍历到的层加入大结果集if(res.size() < deep){//解读该if代码块:如果走到下一层了,我们就需要new一个新的ListList<Integer> item = new ArrayList<>();//将新一层的小结果集放入大结果集res.add(item);}//开始dfs:通过deep找到对应层级的小结果集来存入遍历到的节点res.get(deep-1).add(node.val);dfs(node.left,deep);dfs(node.right,deep);}
}

bfs做法

class Solution {//结果集public List<List<Integer>> res = new ArrayList<List<Integer>>();public List<List<Integer>> levelOrder(TreeNode root) {bfs(root);return res;}//bfs方式:队列的方式来迭代public void bfs(TreeNode node){if(node == null) return;Queue<TreeNode> que = new LinkedList<>();//bfs的做法有时候会比较dfs还要固定//先入根que.offer(node);while(!que.isEmpty()){List<Integer> list = new ArrayList<>();//记录队列长度,用于迭代int len = que.size();while(len > 0){//拿出队列中首层的节点TreeNode tmp = que.poll();list.add(tmp.val);//找左右if(tmp.left!=null) que.offer(tmp.left);if(tmp.right!=null) que.offer(tmp.right);len--;}res.add(list);}}
}


力扣107:107. 二叉树的层序遍历 II

dfs方法

class Solution {//最后进行反转即可public List<List<Integer>> res = new ArrayList<>();public List<List<Integer>> levelOrderBottom(TreeNode root) {dfs(root,0);List<List<Integer>> result = new ArrayList<>();for (int i = res.size() - 1; i >= 0; i-- ) {result.add(res.get(i));}return result;}public void dfs(TreeNode node,Integer deep){if(node == null) return;//深度增加deep++;//新的一层就要增加小结果集if(res.size() < deep){List<Integer> item = new ArrayList<>();res.add(item);}//开始遍历左右//首先将该节点存入对应位置结果集res.get(deep-1).add(node.val);//找左右dfs(node.left,deep);dfs(node.right,deep);}
}

bfs做法

class Solution {//最后进行反转即可public List<List<Integer>> res = new ArrayList<>();public List<List<Integer>> levelOrderBottom(TreeNode root) {bfs(root);List<List<Integer>> result = new ArrayList<>();for (int i = res.size() - 1; i >= 0; i-- ) {result.add(res.get(i));}return result;}public void bfs(TreeNode node){//为空直接返回if(node == null) return;Queue<TreeNode> que = new LinkedList<>();que.offer(node);//然后在while里面去不断迭代while(!que.isEmpty()){//小结果集List<Integer> list = new ArrayList<>();//bfs首先都得记录自己已经入队的节点数int size = que.size();for(int i = 0;i<size;i++){TreeNode tmp = que.poll();//拿出该节点后将该节点值入小结果集list.add(tmp.val);//去找左右if(tmp.left!=null) que.offer(tmp.left);if(tmp.right!=null) que.offer(tmp.right);}//当前层遍历完了,将小结果集加入大结果集res.add(list);}}
}


力扣199:199. 二叉树的右视图

bfs做法,这里就不再贴dfs做法了

class Solution {//思路还是很直接:用bfs做,只需要判断当前遍历到的是不是最右边的就可以public List<Integer> rightSideView(TreeNode root) {List<Integer> res = new ArrayList<>();Deque<TreeNode> que = new LinkedList<>();if(root == null) return res;que.offer(root);while(!que.isEmpty()){int size = que.size();for(int i = 0;i<size;i++){TreeNode tmp = que.poll();//找左右if(tmp.left!=null) que.offer(tmp.left);if(tmp.right!=null) que.offer(tmp.right);//如何判断是右侧看到的:只要i走到了当前层的最后一个节点if(i == size - 1) res.add(tmp.val);}}return res;}
}

 力扣637:637. 二叉树的层平均值

bfs做法,这里就不再贴dfs做法了

class Solution {public List<Double> averageOfLevels(TreeNode root) {List<Double> res = new ArrayList<>();Deque<TreeNode> que = new LinkedList<>();if(root == null) return res;que.offer(root);while(!que.isEmpty()){int size = que.size();double sum = 0.0;for(int i = 0;i<size;i++){TreeNode tmp = que.poll();//计算总值sum += tmp.val;//找左右if(tmp.left!=null) que.offer(tmp.left);if(tmp.right!=null) que.offer(tmp.right);}res.add(sum / size);}return res;}
}

 力扣429:429. N 叉树的层序遍历

bfs做法,这里就不再贴dfs做法了

/*
// Definition for a Node.
class Node {public int val;public List<Node> children;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, List<Node> _children) {val = _val;children = _children;}
};
*/class Solution {public List<List<Integer>> res = new ArrayList<>();Deque<Node> que = new LinkedList<>();public List<List<Integer>> levelOrder(Node root) {//都通过bfs来做会快很多if(root == null) return res;que.offer(root);while(!que.isEmpty()){//记录当前大小int size = que.size();List<Integer> list = new LinkedList<>();for(int i = 0;i<size;i++){Node tmp = que.poll();list.add(tmp.val);//找孩子List<Node> children = tmp.children;//如果没孩子就继续即可if(children == null || children.size() == 0) continue;for(Node child : children){//有孩子就一个个找出来放到队列里面去if(child != null){que.offer(child);}}}//将该层加入大结果集res.add(list);}return res;}
}

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

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

相关文章

anaconda、cuda、tensorflow、pycharm环境安装

anaconda、cuda、tensorflow、pycharm环境安装 anaconda安装 anaconda官方下载地址 本文使用的是基于python3.9的anaconda 接下来跟着步骤安装&#xff1a; 检验conda是否成功安装 安装CUDA和cuDNN 提醒&#xff0c;CUDA和cuDNN两者必须版本对应&#xff0c;否者将会出错…

three.js 中ShaderChunk的, common.glsl 介绍

1. three.js 中ShaderChunk的, common.glsl 介绍 在three.js中&#xff0c;我们可以编写底层的shader代码&#xff0c;是通过 THREE.ShaderMaterial 来进行的。 但是three.js他也通过了一些 shader 代码片段&#xff0c;哎我们可以通过引入这些 shader代码片段&#xff0c;在自…

Educational Codeforces Round 165 (Rated for Div. 2) (C、D)

1969C - Minimizing the Sum 题意&#xff1a; 思路&#xff1a;观察到操作数很小&#xff0c;最值问题操作数很容易想到dp&#xff0c;用表示第个元素&#xff0c;操作了次的最小值总和&#xff0c;转移的时候枚举连续操作了几次即可&#xff0c;而连续操作了几次即将全部变成…

陈随易:论技术思维和产品思维

大家好&#xff0c;我是不被定义的前端之虎陈随易。 我的个人网站是&#xff1a;https://chensuiyi.me&#xff0c;欢迎大家眼熟我。 写这篇文章呢&#xff0c;源于一次群聊。 群友有一个产品&#xff0c;其中涉及到免费用户和付费用户对 pdf 的查看权限问题&#xff0c;使用…

图像处理ASIC设计方法 笔记21 标记ASIC的顶层状态机

目录 (一)标记ASIC的工作流程1 ASIC首先从控制寄存器内读出待标记图像的基本参数2若写入了有效的启动命令,则进入下面一帧图像的标记过程。3 ASIC通过接口模块从FIFO1中读取待标记的图像4一帧图像初步标记完成后进行等价表的整理压缩5从临时标记存储器中读取临时标记送入标记…

gitee本地项目上传

1.先生成SSH密钥 ssh-keygen -t rsa -C "trueelegance163.com" 2.gitee配置公钥&#xff0c;设置对应的公钥名称比如:localtest; Git 全局设置:若刚安装完Git&#xff0c;需要进行Git的配置【若已配置完成&#xff0c;此步骤可以跳过】 git config --global user…

SQL注入基础-4

GetSHELL 一、文件读写注入 1、原理&#xff1a;利用文件读写权限进行注入&#xff0c;可以写入一句话木马&#xff0c;也可以读取系统文件的敏感信息。 2、要求和条件&#xff1a;用户最高权限(可以尝试更改secure_file_priv)和网站绝对路径 3、网站的绝对路径 (1)常见路…

大语言模型从Scaling Laws到MoE

1、摩尔定律和伸缩法则 摩尔定律&#xff08;Moores law&#xff09;是由英特尔&#xff08;Intel&#xff09;创始人之一戈登摩尔提出的。其内容为&#xff1a;集成电路上可容纳的晶体管数目&#xff0c;约每隔两年便会增加一倍&#xff1b;而经常被引用的“18个月”&#xf…

CSS精灵图、字体图标、HTML5新增属性、界面样式和网站 favicon 图标

精灵图 为什么要使用精灵图 一个网页中往往会应用很多小的背景图像作为修饰&#xff0c;当网页中的图像过多时&#xff0c;服务器就会频繁地接收和发送请求图片&#xff0c;造成服务器请求压力过大&#xff0c;这将大大降低页面的加载速度,因此&#xff0c;为了有效地减少服务…

扫雷实现详解【递归展开+首次必展开+标记雷+取消标记雷】

扫雷 一.扫雷设计思路二.扫雷代码逐步实现1.创建游戏菜单2.初始化棋盘3.打印棋盘4.随机布置雷5.统计周围雷的个数6.递归展开棋盘7.标记雷8.删除雷的标记9.保证第一次排雷的安全性棋盘必定展开10.排查雷11.判断输赢 三.扫雷总代码四.截图 一.扫雷设计思路 1.创建游戏菜单。  2.…

Leetcode—1056. 易混淆数【简单】Plus

2024每日刷题&#xff08;126&#xff09; Leetcode—1056. 易混淆数 &#x1f4a9;山实现代码 class Solution { public:bool confusingNumber(int n) {int arr[10] {0};int notNum 0;int arr2[12] {0};int size 0;while(n) {int x n % 10;arr[x] 1;arr2[size] x;if(…

力扣爆刷第132天之动态规划五连刷(子序列问题)

力扣爆刷第132天之动态规划五连刷&#xff08;子序列问题&#xff09; 文章目录 力扣爆刷第132天之动态规划五连刷&#xff08;子序列问题&#xff09;总结&#xff1a;一、1035. 不相交的线二、53. 最大子数组和三、392. 判断子序列四、115. 不同的子序列五、583. 两个字符串的…

OneFlow深度学习框原理、用法、案例和注意事项

本文将基于OneFlow深度学习框架&#xff0c;详细介绍其原理、用法、案例和注意事项。OneFlow是由中科院计算所自动化研究所推出的深度学习框架&#xff0c;专注于高效、易用和扩展性强。它提供了一种类似于深度学习库的接口&#xff0c;可以用于构建神经网络模型&#xff0c;并…

【Java基础】Maven的生命周期(clean+site+default)

1. 前言 在 Maven 出现之前&#xff0c;项目构建的生命周期就已经存在&#xff0c;开发人员每天都在对项目进行清理&#xff0c;编译&#xff0c;测试及部署&#xff0c;但由于没有统一的规范&#xff0c;不同公司甚至不同项目之间的构建的方式都不尽相同。 Maven 从大量项目…

Java Web网页设计(7)-网页查看

7.面我们讲最后一个操作 修改的操作 在讲修改之前 我们先讲一个知识点 表单调用的通常是doPost方法 超链接通常调用的是doGet方法 操作如何在同一个方法 (doGet中) 进行区分 type OrderDao orderDaonew OrderDao(); String typereq.getParameter("type"); …

如何学习 Unreal Engine

学习Unreal Engine&#xff08;简称UE&#xff09;&#xff0c;尤其是最新的UE5&#xff0c;是一项复杂但值得的任务&#xff0c;因为它是游戏开发和实时3D内容创建的强大工具。以下是一些建议来帮助您开始学习Unreal Engine&#xff1a; 1. **了解基础知识**&#xff1a;在深…

nn.GRU层输出:state与output的关系

在 GRU&#xff08;Gated Recurrent Unit&#xff09;中&#xff0c;output 和 state 都是由 GRU 层的循环计算产生的&#xff0c;它们之间有直接的关系。state 实际上是 output 中最后一个时间步的隐藏状态。 GRU 的基本公式 GRU 的核心计算包括更新门&#xff08;update gat…

Arxml文件解析03- 自动驾驶Radar服务radar_svc.arxml

<AR-PACKAGES><AR-PACKAGE><SHORT-NAME>bosch</SHORT-NAME><AR-PACKAGES>...</AR-PACKAGES>

c++中unrodered_map与unordered_set的基本使用

unordered_map 在C中&#xff0c;std::unordered_map 是一个无序关联容器&#xff0c;它包含可以重复的键-值对组合&#xff0c;但每个键在容器中必须是唯一的。与std::map不同&#xff0c;std::unordered_map不按照键的排序顺序存储元素&#xff0c;而是使用哈希表来存储元素…

ZooKeeper以及DolphinScheduler的用法

目录 一、ZooKeeper的介绍 数据模型 ​编辑 操作使用 ①登录客户端 ​编辑 ②可以查看下面节点有哪些 ③创建新的节点&#xff0c;并指定数据 ④查看节点内的数据 ⑤、删除节点及数据 特殊点&#xff1a; 运行机制&#xff1a; 二、DolphinScheduler的介绍 架构&#…