【LeetCode】升级打怪之路 Day 15:二叉树解题的思维模式 —— 遍历、分解问题

news2025/1/21 0:56:19

今日题目:

  • 226. 翻转二叉树
  • 101. 对称二叉树
  • 114. 二叉树展开为链表

目录

      • LC 226. 翻转二叉树 【easy】
      • LC 101. 对称二叉树 ⭐⭐⭐
      • LC 114. 二叉树展开为链表 ⭐⭐⭐

今天的题目主要是对二叉树递归遍历的应用,东哥带你刷二叉树(思路篇) | labuladong 文章对二叉树解题的思维模式进行了总结:

二叉树解题的思维模式分两类:

  1. 【“遍历”思维】是否可以通过遍历一遍二叉树得到答案?如果可以,用一个 traverse 函数配合外部变量来实现,这叫「遍历」的思维模式。
  2. 【“分解问题”思维】是否可以定义一个递归函数,通过子问题(子树)的答案推导出原问题的答案?如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值,这叫「分解问题」的思维模式。

无论使用哪种思维模式,你都需要思考:

如果单独抽出一个二叉树节点,它需要做什么事情?需要在什么时候(前/中/后序位置)做?其他的节点不用你操心,递归函数会帮你在所有节点上执行相同的操作。

今天的题目就展示了“遍历”的思维和“分解问题”的思维的区别和联系。做其中两个题时有点不顺利,所以这部分思维的训练需要着重加强。

LC 226. 翻转二叉树 【easy】

226. 翻转二叉树 | LeetCode

这个题目可以通过递归遍历轻松解决,难度不大。

LC 101. 对称二叉树 ⭐⭐⭐

101. 对称二叉树 | LeetCode

一开始做这个题,是想着用层序遍历的模板来解,但其实并不可以,层序遍历无法得知树的结构,因此无法判别结构上是否对称。

这个题目需要巧妙地使用好二叉树的递归。递归不是必须对一个节点的 left 和 right 进行递归,在这个题目中我们拓展了思路,可以根据具体题目需要,对不同节点继续递归:

在这里插入图片描述
在这个题目中,代码对对称的两个子节点进行 compare。

LC 114. 二叉树展开为链表 ⭐⭐⭐

114. 二叉树展开为链表

这个题目一开始也没想到思路,主要在于没有抓住对“子问题”的解决,也就是在一个局部节点上该怎么做。

通过这个题目,我们学会了用“分解问题”的思维去解决问题。比如在这个题目中,通过解决了将一个局部节点先 flatten,再基于此将更大范围的节点进行 flatten。

这个问题的详细解决思路,可以参考 东哥带你刷二叉树(思路篇) - 将二叉树展开为链表 | labuladong。

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

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

相关文章

砝码称重 蓝桥杯

在C中,fabs()和abs()都用于计算数字的绝对值,但它们之间有一些区别。 fabs(double x):计算浮点数x的绝对值,返回一个double类型的结果。 abs(int x):计算整数x的绝对值,返回一个int类型的结果。 数组的默…

航天民芯一级代理 MT3608 MT3608L 升压转换器 1.2MHZ

MT3608/MT3608L是恒定频率的6引脚SOT23电流模式升压转换器,适用于小型、低功耗应用。MT3608在1.2MHz,允许使用微小、低成本的频率高度不超过2mm的电容器和电感器。内部软启动可实现较小的浪涌电流和延长电池寿命。MT3608具有自动切换到脉冲的功能轻负载下…

【控制台警告】npm WARN EBADENGINE Unsupported engine

今天用webpack下载几个loader依赖,爆出了三个警告,大概的意思就是本地安装的node和npm的版本不是很匹配? 我的解决思路是: 先检查node和npm版本 然后去官网查找版本的对应 靠,官网404 Node.js (nodejs.org) 就找到…

Conda快速安装的解决方法(Mamba安装)

如果你的Conda安装了,你可能会发现一个问题,就是使用Conda install 安装某个软件时,会特别慢,这时候呢?你会上网去搜,然后大家解决的方法呢。一是告诉你镜像可以下载快一点,二是,Mam…

Sentinel 规则持久化,基于Redis持久化【附带源码】

B站视频讲解 学习链接🔗 文章目录 一、理论二、实践2-1、dashboard 请求Redis2-1-1、依赖、配置文件引入2-1-2、常量定义2-1-3、改写唯一id2-1-4、新Provider和Publisher2-1-5、改写V2 2-2、应用服务改造2-2-1、依赖、配置文件引入2-2-2、注册监听器 三、源码获取3…

keycloak18.0.0==源码编译打包

参照官方文档building.md mvn -Pdistribution -pl distribution/server-dist -am -Dmaven.test.skip clean install 报错 ---------- [ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.12.0:npm (npm-install-common) on project keycloak-theme…

MySQL存储过程2——if、case、while、repeat、loop、cursor、handler

1、if用作条件判断 1.1、语法结构 IF 条件1 THEN... ELSEIF 条件2 THEN... ELSE... END IF; 在if条件判断的结构中,Else if结构可以有多个,也可以没有。Else结构可以有,也可以没有 1.2、示例 根据定义的分数score变量,判断当…

mysql学习笔记8——常用5个内置方法

1count 对查询内容进行计数,并返回结果 2as as可以将查询出来结果赋予新名字 3sum sum可以查询某字段特定条件下的和值 4concat concat可以将多列数据合并成一列,只要concat()即可 5group_concat group_concat可以把多列…

Linux|终端管理|如何踢掉操作系统内的用户

一, 关于终端的一些基本概念 tty、pty 和 pts 是在类 Unix 系统(包括 Linux)中与终端交互相关的概念。它们各自代表不同的方面,并且有着密切的关联。 tty (Teletype) tty 原指老式的电传打字机,后来泛指任何类型的终…

Echarts 配置项 series 中的 data 是多维度

文章目录 需求分析 需求 如下图数据格式所示,现要求按照该格式进行绘制折线图 分析 在绘制折线图时,通常我们的 series 中的 data 数据是这样的格式 option {title: {text: Stacked Area Chart},tooltip: {trigger: axis,axisPointer: {type: cross…

内容管理平台用这几个就够了,简单又好用

对于大多数企业和自由职业者来说,选择合适的内容管理平台已经成为一种必备的技能。良好的内容管理平台可以赋能你的团队,让你们更好地协作、管理和分享内容。不管你是要发布博客文章,还是需要管理复杂的项目文档,都可以通过内容管…

华为OD机试 - 疫情扩散时间计算 - 矩阵(Java 2024 C卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷C卷&am…

图论 - DFS深度优先遍历、BFS广度优先遍历、拓扑排序

文章目录 前言Part 1:DFS(深度优先遍历)一、排列数字1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 二、n皇后问题1.问题描述输入格式输出格式数据范围输入样例输出样例 2.算法 三、树的重心1.问题描述输入格式输出格式数据范围…

Ubuntu 下使用 Pybind11 实现 C++ 调用 Python 接口的示例

Pybind11 是一个轻量级的库,它提供了在 C 中无缝集成 Python 代码的能力。使用 Pybind11,你可以很容易地从 C 调用 Python 代码,反之亦然。下面我将通过一个简单的例子来展示如何在 Ubuntu 系统上使用 Pybind11 从 C 调用 Python 接口。 安装…

嵌入式常见概念介绍

什么是ARM: Advanced RISC Machines 先进RISC机器 嵌入式系统自诞生起就分为两条路: RISC:精简指令集计算机,如ARM,所有指令长度一致,指令数量较少 CISC:复杂指令集计算机&#xff0…

git 如何将多个提交点合并为一个提交点 commit

文章目录 核心命令详细使用模式总结示例 核心命令 git merge branch2 是将分支branch2的提交点合并到本地当前分支。 而在执行这条命令的时候,加一个选项--squash就表示在合并的时候将多个提交点合并为一个提交点。 git merge --squash branch2 先看squash单词的意…

2023年CSP-J认证 CCF信息学奥赛C++ 中小学初级组 第一轮真题-选择题解析

2023年 中小学信息学奥赛CSP-J真题解析 1、在C中,下面哪个关键字用于声明一个变量,其值不能被修改 A、unsigned B、const C、static D、mutable 答案:B 考点分析:主要考查变量声明相关知识,const是声明常量&…

LeetCode 刷题 [C++] 第98题.验证二叉搜索树

题目描述 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 题目分析 由题…

指针数组初始化,不常见啊

今天无意间看到这样一段代码,因为还是第一次看到,这是glibc库里的代码,写出来分享一下: #ifndef ERR_MAP # define ERR_MAP(n) n #endif const char *const _sys_errlist_internal[] { #define _S(n, str) [ERR_MAP(n)] …

职场中的团队合作与个人成长

在职场中,团队合作和个人成长是两个不可或缺的要素。一个优秀的团队可以带来更高的工作效率和更好的业绩,而个人的成长则是职场成功的关键。本文将探讨如何在职场中实现团队合作与个人成长的平衡。 一、团队合作的重要性 在职场中,团队合作是…