二叉树习题其二Java【力扣】【算法学习day.9】

前言

前言
书接上篇文章二叉树习题其一,这篇文章我们将基础拓展

###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.完全二叉树的节点个数

题目链接:222. 完全二叉树的节点个数 - 力扣(LeetCode)

题面:

 基本分析:遍历二叉树,遍历的过程中维护一个变量用于统计节点个数

代码:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {int count = 0;public int countNodes(TreeNode root) {if(root==null)return 0;recursion(root);return count;}public void recursion(TreeNode node){if(node==null)return;if(node!=null)count++;recursion(node.left);recursion(node.right);}
}

2.平衡二叉树

题目链接:110. 平衡二叉树 - 力扣(LeetCode)

基本分析:判断是否是平衡二叉树就是判断每个‘根节点’的左右子树的高度差是否小于等于1,以此递归下去

代码:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isBalanced(TreeNode root) {return recursion(root)!=-1;}public int recursion(TreeNode node){if(node==null){return 0;}int left = recursion(node.left);if(left==-1){return -1;}int right = recursion(node.right);if(right==-1){return -1;}return Math.abs(left-right)>=2?-1:Math.max(left,right)+1;}}

3.二叉树的所有路径

题目链接:257. 二叉树的所有路径 - 力扣(LeetCode)

基本分析:同样是遍历二叉树,值得注意的是,拼接箭头最好在递归函数调用的时候,这样可以省去很多麻烦 

代码:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {List<String> list = new ArrayList<>();public List<String> binaryTreePaths(TreeNode root) {recursion(root,"");return list;}public void recursion(TreeNode node,String pre){pre+=node.val;if(node.left!=null) recursion(node.left,pre+"->");if(node.right!=null) recursion(node.right,pre+"->");if(node.left==null&&node.right==null){list.add(pre);return;}}
}

4.左叶子之和

题目链接:404. 左叶子之和 - 力扣(LeetCode)

基本分析:递归函数多维护一个字符串,用于标记该节点是否为左节点,然后就是遍历到最后一个节点进行相加操作

代码:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {int sum = 0;public int sumOfLeftLeaves(TreeNode root) {if(root==null||(root.left==null&&root.right==null))return 0;recursion(root.left,"left");recursion(root.right,"right");return sum;}public void recursion(TreeNode node,String flag){if(node==null){return;}if(node.left==null&&node.right==null&&flag.equals("left")){sum+=node.val;}if(node.left!=null){recursion(node.left,"left"); }if(node.right!=null){recursion(node.right,"right"); }}
}

5.找树左下角的值

题目链接:513. 找树左下角的值 - 力扣(LeetCode)

题面:

基本分析: 这道题要求是找最底层最左边的元素,如果我们调用递归函数是先遍历左节点再遍历右节点,那么一定是先遍历到最底层的左节点,所以只需要判断是不是更低一层即可,然后更改值

代码:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {int ans = 0;int count = Integer.MIN_VALUE;public int findBottomLeftValue(TreeNode root) {ans = root.val;recursion(root.left,2);recursion(root.right,2);return ans;}public void recursion(TreeNode node,int u){if(node==null)return;if(node.left==null&&node.right==null){if(u>count){System.out.println(1);count = u;ans = node.val;}}recursion(node.left,u+1);recursion(node.right,u+1);     }
}

6.路径总和

题目链接:112. 路径总和 - 力扣(LeetCode)

题面:

基本分析: 遍历,并维护一个值,用来记录到达底部时是否和目标值相同

代码:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {int target =0;public boolean hasPathSum(TreeNode root, int targetSum) {if(root==null)return false;target = targetSum;return recursion(root,0);}public boolean recursion(TreeNode node,int sum){if(node==null)return false;sum+=node.val;if(node.left==null&&node.right==null){return sum==target;}boolean bool1 =  recursion(node.left,sum);boolean bool2 =  recursion(node.right,sum);return bool1||bool2;}
}

后言

上面是二叉树的部分习题,下一篇会讲解二叉树的其他相关力扣习题,希望有所帮助,一同进步,共勉! 

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

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

相关文章

云计算第四阶段-----CLOUND二周目 04-06

cloud 04 今日目标&#xff1a; 一、Pod 生命周期 图解&#xff1a; [rootmaster ~]# vim web1.yaml --- kind: Pod apiVersion: v1 metadata:name: web1 spec:initContainers: # 定义初始化任务- name: task1 # 如果初始化任务失败&#…

目前最新 dnSpy V6.5.1版本,最好的 .NET 程序调试、编辑、反编译软件

目前最新 dnSpy V6.5.1版本&#xff0c;最好的 .NET 程序调试、编辑、反编译软件 一、 简介二、新发布程序更新功能三、官方下载&#xff1a; 一、 简介 dnSpy 是一个调试器 .NET 程序集的编辑器。即使没有源代码&#xff0c;也可以使用它来编辑和调试程序集。主要特点&#x…

连锁收银系统

商淘云连锁管理系统助力连锁企业实现“人货账”全方位数字化管理&#xff0c;它依托连锁品牌进销存管理实现门店订货、线下收银、线上商城、会员营销等一体化管理。 门店订货补货支持连锁直营、加盟 不同门店不同进货价、不同门店不同商品、不同门店在线或者账期支付、门店PC或…

分布式---raft算法

1、Leader的选举和Failover过程 首先了解raft中节点的三种状态&#xff1a; 1、Follower&#xff1a;Follower是请求的被动更新者&#xff0c;从Leader接收更新请求&#xff0c;将日志写入到本地文件2、Candidate:如果Follower在一定时间内&#xff0c;如果每收到Leader的心跳…

uniapp 获取签名证书 SHA1 自有证书签名打包

1.登录你的Dcloud 账户 2.找到我的应用菜单 3.点开某个应用 4.查看证书详情&#xff0c;里面有SHA1 和别名&#xff0c;密码&#xff0c;下载证书用于云打包&#xff0c;可以选择自有证书&#xff0c;输入别名&#xff0c;密码打包

GPT+Python)近红外光谱数据分析与定性/定量建模技巧

2022年11月30日&#xff0c;可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT3.5&#xff0c;将人工智能的发展推向了一个新的高度。2023年4月&#xff0c;更强版本的ChatGPT4.0上线&#xff0c;文本、语音、图像等多模态交互方式使其在…

高效实现用友BIP与旺店通数据无缝对接

用友BIP与旺店通企业奇门的YS其他入库单数据集成方案 在企业日常运营中&#xff0c;数据的高效流转和准确对接是确保业务顺畅运行的关键。本文将分享一个具体的系统对接案例&#xff0c;即如何将用友BIP平台中的YS其他入库单数据集成到旺店通企业奇门中&#xff0c;实现两大系…

简历修订与求职经历 - Chap05

现在是又一个周一。上周最值得记录的有这么几件事&#xff1a; 1.拿到了D照。 周二科目一&#xff0c;周四科目二三四联考——是打算为逆行人生准备的。有备无患。然后拿到驾照后发现又有一些问题。看了honda的125&#xff0c;感觉车身好胖。我不喜欢这类很胖的车。然后按照驾…

光伏行业如何借助ERP领跑绿色经济?

在全球能源结构转型和绿色能源转型的大背景下&#xff0c;现在光伏行业呈现出技术创新、市场需求扩大、产能调整和竞争加剧等特点&#xff0c;也预示行业的持续成长和未来的发展潜力。但企业仍然需要不断提高技术水平和管理水平以应对激烈的市场竞争&#xff0c;SAP ERP制定符合…

Maven基于构建阶段分析多余的依赖

基于构建阶段 test compile 实现依赖分析 执行maven 命令: mvn dependency:analyze 关注:Maven-dependency-plugin 分析结果: [INFO] --- maven-dependency-plugin:2.10:analyze (default-cli) impl --- 配置依赖未使用的依赖项&#xff1a; [INFO] --- maven-dependency-…

Lucas带你手撕机器学习——线性回归

什么是线性回归 线性回归是机器学习中的基础算法之一&#xff0c;用于预测一个连续的输出值。它假设输入特征与输出值之间的关系是线性关系&#xff0c;即目标变量是输入变量的线性组合。我们可以从代码实现的角度来学习线性回归&#xff0c;包括如何使用 Python 进行简单的线…

git的安装以及入门使用

文章目录 git的安装以及入门使用什么是git&#xff1f;git安装git官网 git初始化配置使用方式初始化配置&#xff1a; git的安装以及入门使用 什么是git&#xff1f; Git 是一个免费开源的分布式版本控制系统&#xff0c;使用特殊的仓库数据库记录文件变化。它记录每个文件的…

WebGl 使用uniform变量动态修改点的颜色

在WebGL中&#xff0c;uniform变量用于在顶点着色器和片元着色器之间传递全局状态信息&#xff0c;这些信息在渲染过程中不会随着顶点的变化而变化。uniform变量可以用来设置变换矩阵、光照参数、材料属性等。由于它们在整个渲染过程中共享&#xff0c;因此可以被所有使用该着色…

嵌入式linux系统中多路复用和信号驱动实现

大家好,今天主要给大家分享一下,如何使用linux系统中的多路复用和信号驱动的功能实现。 第一:linux多路复用基本特点 当应用程序同时处理多路数据的输入或输出时,若采用非阻塞模式,将达不到预期的效果 如果采用非阻塞模式,对多个输入进行轮询可以实现,但CPU的消耗非常大…

【设计模式系列】装饰器模式

目录 一、什么是装饰器模式 二、装饰器模式中的角色 三、装饰器模式的典型应用场景 四、装饰器模式在BufferedReader中的应用 一、什么是装饰器模式 装饰器模式是一种结构型设计模式&#xff0c;用于在不修改对象自身的基础上&#xff0c;通过创建一个或多个装饰类来给对象…

黑马 | Reids | 基础篇

黑马reids基础篇 文章目录 黑马reids基础篇一.初始Redis1.1SQL 和 NoSql的区别1.1.1结构化和非结构化1.1.2关联和非关联1.1.3查询方式1.1.4 事务1.1.5总结 1.2 认识Redis1.3 Redis安装启动默认启动&#xff1a;后台启动&#xff1a;开机自启 1.4 Redis客户端1.4.1.Redis命令行客…

windows安装mysql,跳过自定义的密码验证

1、mysql版本8 2、配置系统环境变量 3、新建my.ini文件在mysql目录下&#xff0c;需要指定data目录 [mysqld] # 设置3306端口 port3306# 自定义设置mysql的安装目录&#xff0c;即解压mysql压缩包的目录 basedirD:\hjl\app\mysql\mysql-8.0.33-winx64# 自定义设置mysql数据…

24/10/14 算法笔记 循环神经网络RNN

RNN: 一种专门用于处理序列数据的神经网络&#xff0c;它能够捕捉时间序列中的动态特征。RNN的核心特点是其循环连接&#xff0c;这允许网络在不同时间步之间传递信息&#xff0c;从而实现对序列数据的记忆和处理能力。 应用的场景&#xff1a; 自然语言处理&#xff08;NLP&…

[241021] X-CMD 内测版 v0.4.12 新功能: starship ohmyposh ping tping docker ascii

目录 X-CMD 发布内测版 v0.4.12&#x1f4c3;Changelog&#x1f3a8; starship&#x1f3a8; ohmyposh&#x1f3a8; theme&#x1f310; ping&#x1f310; tping&#x1f40b; docker&#x1f4bb; mac - 集成 MacOS 实用功能&#x1f504; ascii&#x1f996; deno&#x1f…

探索秘境:如何使用智能体插件打造专属的小众旅游助手『小众旅游探险家』

文章目录 摘要引言智能体介绍和亮点展示介绍亮点展示 已发布智能体运行效果智能体创意想法创意想法创意实现路径拆解 如何制作智能体可能会遇到的几个问题快速调优指南总结未来展望 摘要 本文将详细介绍如何使用智能体平台开发一款名为“小众旅游探险家”的旅游智能体。通过这…