【算法练习Day15】平衡二叉树二叉树的所有路径左叶子之和

在这里插入图片描述

​📝个人主页:@Sherry的成长之路
🏠学习社区:Sherry的成长之路(个人社区)
📖专栏链接:练题
🎯长路漫漫浩浩,万事皆有期待

文章目录

  • 平衡二叉树
  • 二叉树的所有路径
  • 左叶子之和
  • 总结:

平衡二叉树

110. 平衡二叉树 - 力扣(LeetCode)
在这里插入图片描述

什么是平衡二叉树呢?
该树的每一个节点的两棵子树高度差的绝对值不高于1,则说明该二叉树是平衡二叉树。

思路是这样的:我们可以写一个函数,它的作用是帮我们算出两子树最高的那一个是多高,直到返回到根节点,在比较各个子树的高矮时,如果碰到两子树相差过高,则直接返回-1,在下面比较时我们直接能判断出来。函数的书写我们使用后序遍历的思路,因为我们要判断一个节点的子树,相差是否大于1,然后向上返回,只有后序遍历才能先遍历到两子树。

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

递归的思路就是遍历到空节点就是左右子树为0,所以返回0,然后创建两个整形来保存数据,进入递归分别保存左右子树的高度,然后在最后处理中间节点时作比较,如果高度大于1返回-1,到上一层if判断如果为-1,直接返回-1跳出,如果不是继续遍历,接着将结果赋给整型变量存储。我们是使用判断子树高度的思想来间接判断各子树是否能够平衡。

二叉树的所有路径

257. 二叉树的所有路径 - 力扣(LeetCode)
在这里插入图片描述

这道题就是遍历二叉树的所有节点然后将他们用->连接起来,每一条不同的路径使用不同的字符串,而不是所有路径都是一个字符串。

class Solution {
public:
void get(TreeNode*root,vector<int>& path,vector<string>&result){path.push_back(root->val);if(root->left==NULL&&root->right==NULL){string path2;for(int i=0;i<path.size()-1;i++){path2+=to_string(path[i]);path2+="->";}path2+=to_string(path[path.size()-1]);result.push_back(path2);}if(root->left){get(root->left,path,result);path.pop_back();}if(root->right){get(root->right,path,result);path.pop_back();}
}vector<string> binaryTreePaths(TreeNode* root) {vector<string>result;vector<int>path;get(root,path,result);return result;}
};

这里我们采用前序遍历来写函数的具体实现,要将加入节点写到最前面,因为我们的递归终止条件是遇到叶子节点时,跳出递归返回。需要注意的是每次写完递归之后,还要再下面写下pop,原因是在进入下一个不同路径之前,我们需要pop函数帮助我们弹出这条路径的节点,才能让数组加入下一条路径的数据,而将该数组转化为字符串形式和添加->等这些操作都在,递归的终止条件下进行。

代码精简后:

class Solution {
public:vector<string> binaryTreePaths(TreeNode* root) {vector<string> ret;string path;if(root==nullptr){return ret;}dfs(root,path);return ret;}void dfs(TreeNode* root,string path){path+=to_string(root->val);// 中if(root->left==nullptr&&root->right==nullptr){ret.push_back(path);return;}path+="->";//回溯if(root->left)dfs(root->left,path);// 左if(root->right)dfs(root->right,path); // 右}
};

左叶子之和

404. 左叶子之和 - 力扣(LeetCode)
在这里插入图片描述

这道题是求出该树中左叶子的节点值和,左叶子是左子树和右子树的全部左子叶。解题思路是:写一个函数,分别遍历各节点的左子叶是不是叶子节点,如果是则加入进总数中,最后返回总数。这里我们判断的是左子叶的上一个节点,而不是等到判断到左子叶节点在做处理,这里我们仍然使用后序遍历的方法,将各节点左子叶的总数依次返回直到根节点为止。

class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {if (root == NULL) return 0;if (root->left == NULL && root->right== NULL) return 0;int leftValue = sumOfLeftLeaves(root->left);    // 左if (root->left && !root->left->left && !root->left->right) { // 左子树就是一个左叶子的情况leftValue = root->left->val;}int rightValue = sumOfLeftLeaves(root->right);  // 右int sum = leftValue + rightValue;               // 中return sum;}
};

我们在遍历右侧子树时,也就是后序遍历中的右半部分,只管递归而不做判断的处理,因为要算得是左叶子节点的值,当它一直递归下去往上返回后还是交给左边递归来进行节点的判断。

总结:

今天我们完成了平衡二叉树、二叉树的所有路径、左叶子之和三道题,相关的思想需要多复习回顾。接下来,我们继续进行算法练习。希望我的文章和讲解能对大家的学习提供一些帮助。

当然,本文仍有许多不足之处,欢迎各位小伙伴们随时私信交流、批评指正!我们下期见~

在这里插入图片描述

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

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

相关文章

周总结【java项目】

项目进度&#xff1a; 学习了JavaFX&#xff0c;下载了sceneBuilder辅助工具构建窗口&#xff08;目前建立了登陆&#xff0c;注册&#xff0c;忘记密码的界面&#xff09;&#xff0c;然后是学习了MySQL的连接&#xff0c;现在的项目是刚连上数据库&#xff1b; 下一步&…

多线程锁-synchronized字节码分析

从字节码角度分析synchronized实现 javap -c(v附加信息) ***.class 文件反编译 synchronized同步代码块 >>>实现使用的是monitorenter和monitorexit指令 synchronized普通同步方法 >>>调用指令将会检查方法的ACC_SYNCHRONIZED访问标志是否被设置&#xf…

【项目】5.1阻塞和非阻塞、同步和异步 5.2Unix、Linux上的五种IO模型

5.1阻塞和非阻塞、同步和异步&#xff08;网络IO&#xff09; 典型的一次IO的两个阶段是什么&#xff1f;数据就绪和数据读写 数据就绪&#xff1a;根据IO操作的就绪状态 阻塞非阻塞 数据读写&#xff1a;根据应用程序和内核的交互方式 同步异步 陈硕&#xff1a;在处理IO的…

华为云API自然语言处理的魅力—AI情感分析、文本分析

云服务、API、SDK&#xff0c;调试&#xff0c;查看&#xff0c;我都行 阅读短文您可以学习到&#xff1a;人工智能AI自言语言的情感分析、文本分词、文本翻译 1 IntelliJ IDEA 之API插件介绍 API插件支持 VS Code IDE、IntelliJ IDEA等平台、以及华为云自研 CodeArts IDE&a…

Mac os 点击桌面 出现黑边框 解决

1、桌面黑框效果 2、解决&#xff1a;设置为 仅在台前调度中

水波纹文字效果动画

效果展示 CSS 知识点 text-shadow 属性绘制立体文字clip-path 属性来绘制水波纹 工具网站 CSS clip-path maker 效果编辑器 页面整体结构实现 使用多个 H2 标签来实现水波纹的效果实现&#xff0c;然后使用clip-path结合动画属性一起来进行波浪的起伏动画实现。 <div …

CSS基础语法之盒子模型

目录 一、 选择器 1.1 结构伪类选择器 1.1.1基本使用 1.1.2 :nth-child(公式) 1.2 伪元素选择器 二、 PxCook 三、盒子模型 3.1 盒子模型-组成 3.2 边框线 3.2.1四个方向 3.2.2 单方向边框线 3.3 内边距 3.4 尺寸计算 3.5 外边距+版心居中 3.6 清除默认样式 3.7…

11.3 读图举例

一、低频功率放大电路 图11.3.1所示为实用低频功率放大电路&#xff0c;最大输出功率为 7 W 7\,\textrm W 7W。其中 A \textrm A A 的型号为 LF356N&#xff0c; T 1 T_1 T1​ 和 T 3 T_3 T3​ 的型号为 2SC1815&#xff0c; T 4 T_4 T4​ 的型号为 2SD525&#xff0c; T 2…

【从0开始配置前后端项目】——Docker环境配置

1. 准备一台纯净的服务器 镜像&#xff1a;CentOS 7.9 64位 CPU & 内存&#xff1a;2核2G 系统盘&#xff1a;60GB 峰值带宽&#xff1a;30Mbps 流量包&#xff1a;600GB / 600GB 2. 安装Docker 2.1 卸载旧的版本 $ sudo yum remove docker \docker-client \docker-cl…

【ONE·Linux || 多线程(二)】

总言 多线程&#xff1a;生产者消费者模型与两种实现方式&#xff08;条件变量、信号量&#xff09;、线程池。 文章目录 总言4、生产者消费者模型4.1、基本概念4.2、基于BlockingQueue的生产者消费者模型&#xff08;理解条件变量&#xff09;4.2.1、单生产者单消费者模式&am…

【juc】countdownlatch实现游戏进度

目录 一、截图示例二、代码示例 一、截图示例 二、代码示例 package com.learning.countdownlatch;import java.util.Arrays; import java.util.Random; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurr…

爱普生LQ1900KIIH复位方法

爱普生EPSON 1900KIIH是一部通用针式打印机&#xff0c;136列&#xff08;10cpi下&#xff09;的打印宽度&#xff0c;缓冲区128KB&#xff0c;打印速度为270字/秒。 打印机类型 打印方式&#xff1a;24针击打式点阵打印、打印方向&#xff1a;双向逻辑查找、安全规格标准&am…

Dubbo-CVE-2020-1948

APache Dubbo简介 Dubbo是一个分布式服务框架&#xff0c;致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA服务治理方案。简单的说&#xff0c;dubbo就是个服务框架&#xff0c;如果没有分布式的需求&#xff0c;其实是不需要用的&#xff0c;只有在分布式…

人体姿态标注

人体姿态标注 一 标注工具labelme1.1 安装方式1.2 界面说明 二 数据集准备以下每张图片的命名方式&#xff1a;状态_学号_序号.jpg (注意 一定是jpg格式) 保存到一个文件夹中&#xff0c;便于标注。 例如&#xff1a;FALL_0000_0001.jpg 站立数据(UP)&#xff1a;不同方向&…

MySQL增删查改(进阶1)

一、数据库约束 约束&#xff1a;按照一定条件进行规范的做事&#xff1b; 表定义的时候&#xff0c;某些字段保存的数据需要按照一定的约束条件&#xff1b; 1.null约束 字段null&#xff1a;该字段可以为空&#xff1b;not null&#xff1a;该字段不能为空不指定的话就是…

优优嗨聚集团:OTC药品能否纳入报销成为各方关注焦点,对OTC医疗有何影响

随着医疗费用的不断上涨&#xff0c;各方对于非处方药&#xff08;OTC&#xff09;能否纳入报销的关注度也在不断提升。OTC药品是指无需医生处方即可购买的药品&#xff0c;具有方便快捷、安全有效的特点。然而&#xff0c;对于是否将OTC药品纳入报销范围&#xff0c;各方看法不…

NewStarCTF 2023 WEEK1|PWN ret2text

拖进IDA&#xff0c;查看 int __cdecl main(int argc, const char **argv, const char **envp) {char buf[32]; // [rsp0h] [rbp-20h] BYREFinit();puts("Welcome to NewStar CTF!!");puts("Show me your magic");read(0, buf, 0x100uLL);return 0; } ma…

Java版本+企业电子招投标系统源代码之电子招投标系统建设的重点和未来趋势

一、立项管理 1、招标立项申请 功能点&#xff1a;招标类项目立项申请入口&#xff0c;用户可以保存为草稿&#xff0c;提交。 2、非招标立项申请 功能点&#xff1a;非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点&#xff1a;对草稿进行编辑&#x…

46 二叉树展开为链表

二叉树展开为链表 理解题意&#xff1a;前序遍历的N种写法题解1 前序遍历题解2 反前序遍历(代码简洁)题解3 类似旋转的方法题解4 迭代题解5 同时遍历改左右子树 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNo…

Day-05 CentOS7.5 安装 Docker

参考 &#xff1a; Install Docker Engine on CentOS | Docker DocsLearn how to install Docker Engine on CentOS. These instructions cover the different installation methods, how to uninstall, and next steps.https://docs.docker.com/engine/install/centos/ Doc…