day17 | 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

目录:

解题及思路学习

110.平衡二叉树

https://leetcode.cn/problems/balanced-binary-tree/

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

示例 1:

!https://assets.leetcode.com/uploads/2020/10/06/balance_1.jpg

输入:root = [3,9,20,null,null,15,7]
输出:true

思考:这题用迭代法好像不是特别好求。用递归试试。递归中用一个数,例如 - 1 来表示不满足,这样就可以简化参数。

class Solution {
public:int getHeight(TreeNode* root) {if (root == NULL) return 0;int left = getHeight(root->left);if (left == -1) return -1;int right = getHeight(root->right);if (right == -1) return -1;return abs(left - right) > 1 ? -1 : max(left, right) + 1;}bool isBalanced(TreeNode* root) {return getHeight(root) == -1 ? false : true;}
};

257. 二叉树的所有路径

https://leetcode.cn/problems/binary-tree-paths/

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。

示例 1:

!https://assets.leetcode.com/uploads/2021/03/12/paths-tree.jpg

输入:root = [1,2,3,null,5]
输出:["1->2->5","1->3"]

思考:主要是模拟最后保存结果的过程。

// 版本一
class Solution {
private:void traversal(TreeNode* cur, vector<int>& path, vector<string>& result) {path.push_back(cur->val); // 中,中为什么写在这里,因为最后一个节点也要加入到path中 // 这才到了叶子节点if (cur->left == NULL && cur->right == NULL) {string sPath;for (int i = 0; i < path.size() - 1; i++) {sPath += to_string(path[i]);sPath += "->";}sPath += to_string(path[path.size() - 1]);result.push_back(sPath);return;}if (cur->left) { // 左 traversal(cur->left, path, result);path.pop_back(); // 回溯}if (cur->right) { // 右traversal(cur->right, path, result);path.pop_back(); // 回溯}}public:vector<string> binaryTreePaths(TreeNode* root) {vector<string> result;vector<int> path;if (root == NULL) return result;traversal(root, path, result);return result;}
};

c++写代码中,如果最后的处理节点在空节点处,则遍历的时候不用加 if(cur→left) 这样的判断条件。如果处理的节点是在叶子节点,则空节点不进入处理的逻辑,需要加判断条件。

404.左叶子之和

https://leetcode.cn/problems/sum-of-left-leaves/

给定二叉树的根节点 root ,返回所有左叶子之和。

示例 1:

!https://assets.leetcode.com/uploads/2021/04/08/leftsum-tree.jpg

输入: root = [3,9,20,null,null,15,7]
输出: 24
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

思考:处理逻辑是当遇到左叶子节点的时候,返回左叶子节点的值。但是判断左叶子节点还需要父节点。

class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {if (root == NULL) return 0;if (root->left == NULL && root->right == NULL) return 0;int left = sumOfLeftLeaves(root->left);if (root->left && root->left->left == NULL && root->left->right == NULL) {left = root->left->val;}int right = sumOfLeftLeaves(root->right);return left + right;}
};

迭代法:

这里用了栈作为容器。使用前序遍历。

class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {stack<TreeNode*> st;if (root == NULL) return 0;st.push(root);int result = 0;while(!st.empty()) {TreeNode* node = st.top();st.pop();if (node->left && !node->left->left && !node->left->right) {result += node->left->val;}if (node->right) st.push(node->right);if (node->left) st.push(node->left);}return result;}
};

复盘总结

个人反思

1、c++写代码中,如果最后的处理节点在空节点处,则遍历的时候不用加 if(cur→left) 这样的判断条件。如果处理的节点是在叶子节点,则空节点不进入处理的逻辑,需要加判断条件。

2、使用to_string函数可以将数字转换为字符串, 返回值为转换完的字符串。默认情况下,to_string默认输出6位小数,但这不一定是您想要的。C ++ 11引入了std :: to_string的另一个重载版本,该版本接受一个小数位数参数。

头文件:include<cstring>

std::to_string
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);

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

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

相关文章

Linux学习之firewallD

systemctl status firewalld.service查看一下firewalld服务的状态&#xff0c;发现状态是inactive (dead)。 systemctl start firewalld.service启动firewalld&#xff0c;systemctl status firewalld.service查看一下firewalld服务的状态&#xff0c;发现状态是active (runni…

okcc呼叫系统导入呼叫名单/客户资料的数量上限,okcc通话声音小有哪几种处理办法?

系统导入呼叫名单/客户资料的数量上限 呼叫名单一次最多十万 客户资料一次最多五万 通话声音小有哪几种处理办法&#xff1f; 1、IP话机&#xff1a;通过话机上的音量调节按钮来进行调节。 2、模拟话机&#xff1a;修改语音网关上的增益来实现。 “ 往IP增益”表示电话呼入…

stable diffusion 运行时报错: returned non-zero exit status 1.

运行sh run.sh安装stable diffusion时报错&#xff1a;ImportError: cannot import name builder from google.protobuf.internal (stable-diffusion-webui/venv/lib/python3.8/site-packages/google/protobuf/internal/__init__.py) 原因&#xff1a;python版本过低&#xff0…

ubuntu16.04制作本地apt源离线安装

一、首先在有外网的服务器安装需要安装的软件&#xff0c;打包deb软件。 cd /var/cache/apt zip -r archives.zip archives sz archives.zip 二、在无外网服务器上传deb包&#xff0c;并配置apt源。 1、上传deb包安装lrzsz、unzip 用ftp软件连接无外网服务器协议选择sftp…

股票交易c接口包含哪些调用函数?

股票交易的C接口中可能包含多个调用函数&#xff0c;具体的调用函数取决于所使用的接口规范和交易所的要求。接下来看看下面是一些可能常见的股票交易C接口调用函数的示例&#xff1a; 1. 连接函数&#xff08;Connect&#xff09;&#xff1a;用于与交易所建立网络连接。 2.…

CSS(JavaEE初阶系列14)

目录 前言&#xff1a; 1.CSS是什么 1.1CSS基本语法 2.引入样式 2.1内部样式表 2.2行内样式表 2.3外部样式 3.选择器 3.1选择器的种类 3.1.1基础选择器 3.1.2复合选择器 4.常用元素属性 4.1字体属性 4.2文本属性 4.3背景属性 4.4圆角矩形 4.5元素的显示模式 4…

​LeetCode解法汇总2682. 找出转圈游戏输家

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; n 个朋友…

【Leetcode】84.柱状图中最大的矩形(Hard)

一、题目 1、题目描述 给定 n n n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例1: 输入:heights = [2,1,5,6,2,3] 输出:10 解释:最大的矩形为图中红色区域,面积为 10示例2:…

学习Vue:Vue Router的集成与基本配置

在Vue.js中&#xff0c;路由与导航是构建单页应用程序&#xff08;SPA&#xff09;的关键概念。Vue Router是Vue.js官方提供的路由管理库&#xff0c;它允许您轻松地实现页面之间的切换、嵌套路由和参数传递。在本文中&#xff0c;我们将深入了解Vue Router的集成和基本配置。 …

Stephen Wolfram:那么…ChatGPT 在做什么,为什么它有效呢?

So … What Is ChatGPT Doing, and Why Does It Work? 那么…ChatGPT在做什么&#xff0c;为什么它有效呢&#xff1f; The basic concept of ChatGPT is at some level rather simple. Start from a huge sample of human-created text from the web, books, etc. Then train…

IDA远程调试真机app

IDA远程调试真机app 第一步&#xff1a;启动 android_server&#xff0c;并修改端口 # 启动android_server ./android_server -p31928第二步&#xff1a;端口转发、挂起程序 # 端口转发adb forward tcp:31928 tcp:31928# 挂起程序 adb shell am start -D -n com.qianyu.antid…

Hyper-V增加桥接网络设置(其他方式类同)

点击连接到的服务器&#xff0c;右单击或者右边点击“虚拟交换机管理器” 选择网络种类 配置虚拟交换机信息 外部网络选择物理机网卡设备

Linux中UDP服务端和客户端

1 服务端代码 #include <stdio.h> #include <head.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h>#define PORT 6666 //端口号&#xff1a;1024~49191 #define IP "192.168.1.110"//"192.168.122.1…

中国“诺贝尔奖”未来科学大奖公布2023年获奖名单

未来科学大奖委员会于8月16日公布2023年获奖名单。柴继杰、周俭民因发现抗病小体并阐明其结构和在抗植物病虫害中的功能做出的开创性工作获得“生命科学奖”&#xff0c;赵忠贤、陈仙辉因对高温超导材料的突破性发现和对转变温度的系统性提升所做出的开创性贡献获得“物质科学奖…

突破网络编程1024限制的方法(修改配置文件)

文章目录 概述修改linux配置相关命令步骤1. 打开终端2. 使用sudo权限编辑文件3. 添加资源限制配置4. 保存和退出5. 重启系统或重新登录 其他方法1. 使用事件驱动的框架2. 使用连接池3. 负载均衡4. 使用线程池和进程池5. 升级操作系统设置6. 使用专业的高性能服务器7. 分布式架构…

深入源码分析kubernetes informer机制(三)Resync

[阅读指南] 这是该系列第三篇 基于kubernetes 1.27 stage版本 为了方便阅读&#xff0c;后续所有代码均省略了错误处理及与关注逻辑无关的部分。 文章目录 为什么需要resyncresync做了什么 为什么需要resync 如果看过上一篇&#xff0c;大概能了解&#xff0c;client数据主要通…

1、基于 CentOS 7 构建 LVS-DR 群集。 2、配置nginx负载均衡

一、基于CentOS7和、构建LVS-DR群集 准备四台虚拟机 ip作用192.168.27.150客户端192.168.27.151LVS192.168.27.152RS192.168.27.152RS 关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld安装ifconfig yum install net-tools.x86_64 -y1、DS上 1.1 配置LVS虚拟IP …

uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册

引言 我使用到painter的原因是&#xff0c;在uniapp开发微信小程序时&#xff0c;需要将一个页面的内容转换成图片保存到本地相册。 起初在网上找到很多都是在uniapp中使用 html2canvas 将网页转换成图片再jspdf将图片转换为pdf&#xff0c;但是这种方式在小程序环境不支持&am…

opencv进阶08-K 均值聚类cv2.kmeans()介绍及示例

K均值聚类是一种常用的无监督学习算法&#xff0c;用于将一组数据点分成不同的簇&#xff08;clusters&#xff09;&#xff0c;以便数据点在同一簇内更相似&#xff0c;而不同簇之间差异较大。K均值聚类的目标是通过最小化数据点与所属簇中心之间的距离来形成簇。 当我们要预测…

opencv实现以图搜图

这里写目录标题 1. 步骤1.1 导入OpenCV库&#xff1a;1.2 加载图像1.3 提取特征1.4 匹配特征1.5 显示结果 2. 完整代码3. 测试图片及效果 1. 步骤 1.1 导入OpenCV库&#xff1a; 在您的C代码中&#xff0c;首先需要导入OpenCV库。您可以使用以下语句导入核心模块&#xff1a;…