letcode 分类练习 110. 平衡二叉树 257. 二叉树的所有路径 404. 左叶子之和 222. 完全二叉树的节点个数

server/2024/9/20 7:36:45/ 标签: 分类, 深度优先, 算法, 数据结构

letcode 分类练习 110. 平衡二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度

  • 110. 平衡二叉树
  • 257. 二叉树的所有路径
  • 404. 左叶子之和
  • 222. 完全二叉树的节点个数

101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度)

110. 平衡二叉树

在这里插入图片描述
用递归的思路检查左子树和右子树的高度差绝对值是不是在1以内,为了方便同时获取左子树和右子树的高度,我们定义如果高度为-1表示该子树不满足平衡二叉树,如果不等于-1表示子树的高度

class Solution {
public:int height(TreeNode* node){if(!node) return 0;int left_depth = height(node -> left);int right_depth = height(node -> right);if(left_depth == -1 || right_depth == -1 || abs(left_depth - right_depth) > 1)return -1;else return max(left_depth, right_depth) + 1;}bool isBalanced(TreeNode* root) {return height(root) >= 0;}
};

257. 二叉树的所有路径

在这里插入图片描述
每个节点都对应唯一的从根节点出发的路径,只需要做一个遍历,如果它是叶子节点就记录路径即可

class Solution {
public:vector<string> result;void dfs(TreeNode* root, string s){if(!root) return;if(!root->left && !root->right)result.push_back(s);if(root->left)dfs(root -> left, s + "->" + to_string(root -> left -> val));if(root->right)dfs(root -> right, s + "->" + to_string(root -> right -> val));}vector<string> binaryTreePaths(TreeNode* root) {if(!root) return result;if(!root -> left&& !root->right){result.push_back(to_string(root->val)); return result;}dfs(root, to_string(root->val));return result;}
};

404. 左叶子之和

在这里插入图片描述传参的时候可以告诉该节点是左孩子还是右孩子,再判断一下当前节点是不是叶子结点即可

class Solution {
public:int sum = 0;void dfs(TreeNode* root, int flag){if(!root) return;if(!root -> left && !root -> right && flag == 0)sum+= root->val;dfs(root->left, 0);dfs(root ->right, 1);}int sumOfLeftLeaves(TreeNode* root) {dfs(root, -1);return sum;}
};

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

在这里插入图片描述
可以利用完全二叉树的性质解题
完全二叉树是一定要按照一层一层的顺序装填的,所以判断完全二叉树只需要一直向左和一直向右迭代,两边的深度一样即可,注意下面的不是完全二叉树:
在这里插入图片描述

class Solution {
public:int countNodes(TreeNode* root) {if (root == nullptr) return 0;TreeNode* left = root->left;TreeNode* right = root->right;int leftDepth = 0, rightDepth = 0; // 这里初始为0是有目的的,为了下面求指数方便while (left) {  // 求左子树深度left = left->left;leftDepth++;}while (right) { // 求右子树深度right = right->right;rightDepth++;}if (leftDepth == rightDepth) {return (2 << leftDepth) - 1; // 注意(2<<1) 相当于2^2,所以leftDepth初始为0}return countNodes(root->left) + countNodes(root->right) + 1;}
};

http://www.ppmy.cn/server/104874.html

相关文章

初始redis:List

列表 List 相当于数组或者顺序表。 对于List来说&#xff0c;两侧都可以插入和删除&#xff0c;时间复杂度是O(1)。 有很多的操作&#xff0c;比如 llen 可以获取List的长度&#xff0c;lrem 可以删除元素 &#xff0c;lrange可以去一个字符串 &#xff0c; lindex可以根据下标…

Tomcat学习进阶

目录 Apache Tomcat架构配置线程模型Tomcat 的类加载机制类加载器层次结构类加载流程 Tomcat 的优化策略Tomcat 的集群部署Tomcat故障排查 Apache Tomcat 架构配置 Apache Tomcat是一个开源的Java Servlet容器和Web服务器&#xff0c;它实现了Java EE规范中的Servlet和JSP API。…

SQL-约束篇

在数据库设计中&#xff0c;约束是确保数据完整性和准确性的关键元素。约束可以限制表中数据的类型、范围和关系&#xff0c;从而维护数据的一致性和可靠性。 1. 主键约束 (Primary Key) 主键约束用于唯一标识表中的每一行数据。一个表只能有一个主键&#xff0c;主键字段的值…

火狐浏览器应用商店不支持下载

前言 之前手机一直用的火狐浏览器&#xff0c;现在换了新的手机&#xff0c;又想下载使用&#xff0c;从官网直接下载现在直接跳载到Google Play才能下载&#xff0c;但是国内又用不了的&#xff0c;这里就记录一下怎么在手机应用商店不支持情况下载。 从FTP服务器下载Beta版…

PostgreSQL常用命令,启动连接,pg_dump导入导出

文章目录 1 PostgreSQL服务启动与停止、连接2 常用sql命令3 数据备份与恢复 1 PostgreSQL服务启动与停止、连接 在没有设置环境变量的情况下 需进入pgsql的bin目录 #Windows下启动 #打开“开始”菜单&#xff0c;找到 “PostgreSQL” 文件夹&#xff0c;找到 “pgAdmin” 应用…

Spring Boot中的过滤器与拦截器实战:实现用户认证与资源访问控制

源访问控制 概述 在构建Web应用时&#xff0c;我们经常需要实现诸如用户认证、资源访问控制等功能。Spring Boot 提供了多种工具来帮助开发者轻松实现这些需求。本文将介绍如何使用Spring Boot 3.x中的过滤器&#xff08;Filter&#xff09;和拦截器&#xff08;Interceptor&…

TCP shutdown 之后~

目录 摘要 1 API 2 shutdown(sockfd, SHUT_WR) 3 shutdown(sockfd, SHUT_WR) 4 kernel 是怎么做的&#xff1f; 附 摘要 通过 shutdown() 关闭读写操作&#xff0c;会发生什么&#xff1f;具体点呢&#xff0c;考虑两个场景&#xff1a; 场景一&#xff1a;C 发送数据完毕…

【设计模式】单例模式

单例模式是一种常见的软件设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问这个实例。 一、定义与核心概念 单例模式的主要目的是限制一个类的实例化次数&#xff0c;只允许创建一个对象。这样可以在整个应用程序中共享同一个实例&#…

快速定位Linux中内存占用最多前几个进程

ps aux --sort-%mem | head 命令 ps aux --sort-%mem | head 在 Linux 和类 Unix 系统中用于显示当前系统中占用内存最多的前几个进程。让我们分解这个命令来理解它是如何工作的&#xff1a; ps aux&#xff1a;这是 ps 命令的一个常用选项组合&#xff0c;用于显示当前系统上…

Java面试题———MySql篇②

目录 1.事务隔离级别 2.数据库三大范式 3.索引的分类 4.索引的创建原则 5.索引失效的情况 6.如何知道索引是否失效 7.MyISAM和InnoDB的区别 1.事务隔离级别 事务隔离级别是用来解决并发事务问题的方案&#xff0c;不同的隔离级别可以解决的事务问题不一样 读未提交&…

周边乡村游小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;游客&#xff0c;景点信息管理&#xff0c;景点美食管理&#xff0c;美食类型管理&#xff0c;景点攻略管理&#xff0c;特产信息管理&#xff0c;特产类型管理&#xff0c;系统管理 微信端账号功能包…

XSS游戏

目录 XSS游戏-WarmupsMa Spaghet!JefffUgandan KnucklesRicardo MilosAh Thats HawtLigmaMafiaOk, BoomerWW3 XSS游戏-Warmups Ma Spaghet! 1. 尝试注入&#xff0c;输入aaaaaaaa 2. 显示在<h2>标签内3. 输入标签&#xff0c;添加onmouseover属性值为alert(1337)&…

单例模式详细

文章目录 单例模式介绍八种方式1、饿汉式&#xff08;静态常量&#xff09;2、饿汉式&#xff08;静态代码块&#xff09;3、懒汉式&#xff08;线程不安全&#xff09;4、懒汉式&#xff08;线程安全&#xff0c;同步方法&#xff09;5、懒汉式&#xff08;线程不安全&#xf…

1089:数字反转

1089&#xff1a;数字反转 时间限制: 1000 ms 内存限制: 65536 KB 提交数:115082 通过数: 61304 【题目描述】 给定一个整数&#xff0c;请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式&#xff0c;即除非给定的原数为零&#xff0c;否则反转后…

UDP 和TCP的应用

一、网络模型 &#xff08;一&#xff09;C/S 模型 客户端 / 服务器&#xff08;Client/Server&#xff0c;C/S&#xff09;模型是一种常见的网络架构。在这种模型中&#xff0c;客户端是主动的角色&#xff0c;向服务器发起请求&#xff1b;服务器端是被动的角色&#xff0c;…

CSS的:scope伪类:精准定位表格元素的新策略

CSS&#xff08;层叠样式表&#xff09;是控制网页元素样式的强大工具。随着CSS规范的不断更新&#xff0c;新的选择器和伪类被引入&#xff0c;以增强开发者对页面元素的控制能力。:scope伪类是CSS中一个相对较新的特性&#xff0c;它允许开发者在特定的上下文中选择元素&…

Vue 和 React 各自的背景和特点

Vue 的背景和特点 背景&#xff1a; Vue.js 由尤雨溪于2014年创建&#xff0c;并于同年发布第一个版本。Vue 的设计目标是简单、灵活&#xff0c;易于上手&#xff0c;具有响应式数据绑定和组件化开发的特性。 解决的问题&#xff1a; Vue 解决了构建交互式前端界面的问题&…

美国高防服务器到底怎么选

美国高防服务器因其强大的硬件设施、高度的网络连接性、丰富的带宽资源和先进的防御技术而受到全球用户的欢迎。以下是选择美国高防服务器时需要考虑的关键因素&#xff0c;rak部落为您整理发布美国高防服务器到底怎么选。 确定服务器需求 容量和带宽&#xff1a;根据业务规模…

CSS的:in-range和:out-of-range伪类:增强输入验证的视觉反馈

在Web表单设计中&#xff0c;输入验证是确保用户提交有效数据的关键环节。HTML5引入了<input>元素的min和max属性&#xff0c;使得在前端就可以对数值输入进行范围限制。CSS3进一步扩展了这一功能&#xff0c;通过:in-range和:out-of-range伪类&#xff0c;开发者可以为处…

Java 3.1 - 计算机网络

目录 OSI 七层协议是什么&#xff1f;每一层的作用是什么&#xff1f; TCP / IP 四层模型是什么&#xff1f;每一层的作用是什么&#xff1f; 应用层&#xff08;Application Layer&#xff09; 传输层&#xff08;Transport Layer&#xff09; 网络层&#xff08;Network …