代码随想录day14 Java版 二叉树部分

今天开始刷二叉树的题目,发现大多数都是在昨天的遍历的基础上的变式

226.翻转二叉树

根据题目描述模拟整个交换过程,发现非常像前序遍历的递归方式:每次先将当前节点的左右孩子互换,再递归左右孩子,当节点为空的时候停下。(实际上看了题解发现除了中序遍历先处理了左边,回到中间节点时将左右颠倒了,之后处理“右边”部分相当于把左边转了回来。可以把处理完中间节点的代码改成依然处理左边)

我最开始在写题的时候将交换功能单独写了个函数swap,但测试发现根本没更改节点,查资料发现Java函数只有值传递,所以交换的都是传入参数的副本。因此交换的代码需要写在递归函数里面。

class Solution {public TreeNode invertTree(TreeNode root) {invert(root);return root;}void invert(TreeNode node) {if (node == null) return;TreeNode tmp = node.left;node.left = node.right;node.right = tmp;invert(node.left);invert(node.right);}  
}

101. 对称二叉树

发现本质是判断两个子树的内侧节点和外侧节点值是否相等,这种递归就需要两个参数,套路是从第二层开始找规律。这题的递归结束条件是对称两侧都为空,boolean返回值需要处理两个结束条件

class Solution {public boolean isSymmetric(TreeNode root) {return is(root.left,root.right);}public boolean is(TreeNode left,TreeNode right){if(left==null && right==null) return true;if(left==null || right==null) return false;return left.val==right.val && is(left.left,right.right) && is(left.right,right.left);}
}

104.二叉树的最大深度

比较简单,递归条件为节点为空,每次进入递归+1

class Solution {public int maxDepth(TreeNode root) {if (root == null) return 0;return Math.max(maxDepth(root.left),maxDepth(root.right))+1;}
}

111.二叉树的最小深度

本来以为跟上面一题一样,测试用例一看发现如果出现节点一边没有孩子的情况会误判

因此需要额外判断左右边是否直接空了,空了就返回另一侧+1

class Solution {public int minDepth(TreeNode root) {if (root == null) return 0;if (root.left == null) return minDepth(root.right)+1;if (root.right == null) return minDepth(root.left)+1;return Math.min(minDepth(root.left),minDepth(root.right))+1;}
}

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

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

相关文章

Codeforces Round 734 (Div. 3)B2. Wonderful Coloring - 2(贪心构造实现)

思路: 分类讨论: 当一个数字出现的次数大于等于k,那么最多有k个能被染色, 当一个数字出现的次数小于k,南那么这些数字都可能被染色 还有一个条件就是需要满足每个颜色的数字个数一样多,这里记出现次数小于k…

C#学习笔记_继承

基本概念 继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。 当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数&#xff0…

AI监控+智能充电桩系统如何缓解新能源汽车充电难问题

在新能源汽车行业的快速发展中,充电桩作为重要的配套设施,其建设和发展至关重要。随着新能源汽车销量的增长,补能需求也日益迫切,这为充电桩行业的发展提供了巨大的机遇。然而,充电桩行业在快速发展的同时,…

MavenGradle等引入jSerialComm

引入 jSerialComm [2.0.0,3.0.0) 此版本发布于 Nov 7, 2023 (23年11月) Maven: <dependency><groupId>com.fazecast</groupId><artifactId>jSerialComm</artifactId><version>[2.0.0,3.0.0)</version> </dependency>Ivy: …

[云顶数模]2024美赛CEF题成品参考论文+配套数据集+可执行代码+运行结果图

E题社区抗灾能力综合评估与决策模型研究 摘要&#xff1a;社区抗灾能力的提升对于灾害风险管理至关重要。本研究基于机器学 习方法&#xff0c;构建了社区抗灾能力预测模型&#xff0c;以评估社区在灾害事件中的表现。首先&#xff0c; 我们采用梯度提升树模型对社区基础设施、…

Prometheus 采集Oracle监控数据

前言 oracledb_exporter是一个开源的Prometheus Exporter,用于从Oracle数据库中收集关键指标并将其暴露给Prometheus进行监控和告警。它可以将Oracle数据库的性能指标转换为Prometheus所需的格式,并提供一些默认的查询和指标。 download Oracle Oracle Windows Install …

C++面试:事务的隔离级别和实践原理

目录 1. 读未提交&#xff08;Read Uncommitted&#xff09; 定义 问题 场景 实践注意事项 MySQL SQL Server PostgreSQL 注意 2. 读提交&#xff08;Read Committed&#xff09; 定义 问题 场景 如何操作 MySQL SQL Server PostgreSQL 注意事项 3. 可重复读…

【Docker】网络配置network详解

一&#xff0c;network的概述 解决痛点&#xff08;能干什么&#xff1f;&#xff09;&#xff1a; &#xff08;1&#xff09;容器间的互联和通信以及端口映射 &#xff08;2&#xff09;容器IP变动时候&#xff0c;可以通过服务名直接网络通信而不受到影响 二&#xff0c;n…

webrtc mediasoup sctp 起什么作用? 用来传输什么数据

WebRTC是一种用于实时通信的开放标准&#xff0c;而mediasoup是一个基于WebRTC的流媒体服务器。SCTP&#xff08;Stream Control Transmission Protocol&#xff09;是WebRTC中的一个传输协议&#xff0c;它在WebRTC中起到了重要的作用。 SCTP主要用于在WebRTC中传输数据通道&…

功率信号的频谱

目录 1. 前言2. 功率信号的频谱3. 参考资料 1. 前言 知识点1&#xff1a;函数周期性判定定理   假设函数 f ( x ) f(x) f(x) 和函数 g ( x ) g(x) g(x) 均为周期性函数&#xff0c;其最小正周期分别为 T f T_f Tf​ 和 T g T_g Tg​&#xff0c;若 T f / T g T_f/T_g T…

搜索引擎评价指标及指标间的关系

目录 二分类模型的评价指标准确率(Accuracy,ACC)精确率(Precision,P)——预测为正的样本召回率(Recall,R)——正样本注意事项 P和R的关系——成反比F值F1值F值和F1值的关系 ROC&#xff08;Receiver Operating Characteristic&#xff09;——衡量分类器性能的工具AUC&#xff…

2月2日作业 C语言笔试题整理

1、请简述gcc的编译步骤 预处理&#xff1a;展开头文件、删除注释、替换宏 编译&#xff1a;检查语法正确性&#xff0c;生成汇编文件 汇编&#xff1a;把汇编语言转换为二进制文件&#xff0c;生成目标文件 链接&#xff1a;把多个目标文件链接为可执行文件 2、C语言中基…

基于Java SSM框架实现校园兼职系统项目【项目源码+论文说明】

基于java的SSM框架实现校园兼职系统演示 摘要 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个学生的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;…

买电脑注意事项之CPU型号后面的字母都代表什么意思

在 CPU 型号后面的字母通常表示该 CPU 的一些特性或用途。不同的字母可能代表不同的系列、性能级别、功耗特性等。以下是一些常见的 CPU 后缀字母及其可能的含义&#xff1a; U&#xff08;例如&#xff1a;i5-8250U&#xff09;: Ultra Low Power&#xff1a;表示低功耗&#…

Elasticsearch(简称ES)性能优化 实践

Elasticsearch&#xff08;简称ES&#xff09;性能优化主要包括以下几个方面&#xff1a; 索引优化&#xff1a; 选择合适的分片数&#xff1a;根据业务需求和数据量合理设置分片数&#xff0c;避免过多或过少分片造成性能问题。分片数过多会导致创建分片速度变慢、集群易崩溃…

[office] excel计算客户名单的人数 COUNTA 函数:“销售额”不仅是金额的总和 #知识分享#职场发展#知识分享

excel计算客户名单的人数 COUNTA 函数&#xff1a;“销售额”不仅是金额的总和 前文中介绍的 SUM 函数&#xff0c;是在日常工作中使用频率最高的函数之一。但是&#xff0c;在实际操作时也会出现问题。比如在计算销售额总和时&#xff0c;SUM 函数得出的结果为金额总和。但是…

RISC-V指令格式

RISC-V指令格式 1 RISC-V指令集命名规范2 RISC-V指令集组成2.1 基础整数指令集2.2 扩展指令集 3 RISC-V指令格式3.1 指令表述3.2 指令格式 本文属于《 RISC-V指令集基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 RISC-V指令集命名规范 前面提到过RV32I&#xff0c;这是…

本地部署 SalesGPT

本地部署 SalesGPT 0. 背景1. SalesGPT 项目介绍2. SalesGPT 项目 Github 地址3. 本地部署 SalesGPT4. 运行 SalesGPT 0. 背景 最近有同事想玩玩 SalesGPT&#xff0c;结果发现使用 OpenAI API 时&#xff0c;会发生超过 Limit 的问题无法继续对话。 今天尝试通过本地部署开源…

5. 基础网络服务与应用配置

5.1 实验一&#xff1a;FTP 基础配置实验 5.1.1 实验介绍 5.1.1.1 关于本实验 设备支持多种文件管理方式&#xff0c;用户根据任务和安全性要求选择合适的文件管理方式。 用户可以通过直接登录系统、FTP&#xff08;File Transfer Protocol&#xff09;、TFTP&#xff08;T…

从编程中理解:大脑的短期记忆和长期记忆

在编程中,我们可以将大脑的短期记忆和长期记忆类比为程序中的变量作用域和持久化存储。在Unity C#编程环境下,可以这样解释: 假设金庸武侠世界中的人物张无忌正在修炼九阳真经。我们用C#代码来模拟他学习武功的过程,其中涉及的“短期记忆”与“长期记忆”。 public class…