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

今日题目:

  • 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.mzph.cn/news/725317.shtml

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

相关文章

java接口(interface)的编写以及实现(implements)

在Java中编写接口可以按照以下步骤进行操作: 首先定义一个新的文件并使用.java为后缀名。这将成为我们要创建的接口所在的类文件。 在该文件中,使用关键字 interface 来声明一个接口。例如:public interface MyInterface { }。 在接口内部&…

谈谈伦敦金操作策略中如何加码

在伦敦金操作策略中应该涉及加码的问题,什么叫加码呢?加码是指一笔伦敦金交易盈利以后,在市场中再注入资金进行加仓。在有利于自己的情况下,我们仓位越重,累积的盈利越多。而且这是在已经盈利的基础上加码,…

Java 学习和实践笔记(28):equals方法的使用

equals() 是Object类里的一个方法。而Object类是所有类的父类,所有的Java对象都拥有Object类的属性和方法。一切类,如果在类的声明中未使用extends,则默认继承Object类。如果声明了,那么Object类就变成该类的父类的父类的...类&am…

python+django高校澡堂洗浴浴室预约签到管理系统8d8c

本系统在设计过程中,高校洗浴管理系统的出现就有很大的需求。该系统可以很好地解决这些麻烦和问题。 很好地发挥了该开发方式的优势,让实现代码有了良好的可读性,而且使代码的更新和维护更加的方便,操作简单,对以后的维…

带你详细理解数组与指针(包含二维数组)

作者博客主页:谦逊码农的旅程 1. sizeof中单独放一个数组名,此时的数组名表示整个数组。 2. &数组名,表示整个数组的地址。 3. 在 C 语言中,变量的地址通常是由一个指针来表示,而指针的大小取决于计算机架构和操…

MySQL·SQL优化

目录 一 . 前言 二 . 优化方法 1 . 索引 (1)数据构造 (2)单索引 (3)explain (4)组合索引 (5)索引总结 2 . 避免使用select * 3 . 用union all代替u…

Linux之cd、pwd、mkdir 命令

cd命令,切换目录 1)当Linux终端(命令行)打开的时候,会默认以用户的HOME目录作为当前的工作目录。 2)我们可以通过cd命令,更改当前所在的工作目录。 3)cd命令来自英文:C…

C#使用Stack类进行堆栈设计

目录 一、涉及到的知识点 1.栈定义 2.Stack类 二、 使用Stack类进行堆栈设计 1.创建一个新的Stack实例 2.然后,可以使用Push方法将元素添加到堆栈中 3.使用Pop方法从栈顶删除一个元素 4.使用Peek方法查看堆栈顶部的元素 三、实例 一、涉及到的知识点 1.栈…

java中的死锁问题

什么是死锁? 当多个线程持有不同的资源,并且互相等待对方释放资源时,就会导致死锁的发生。在死锁情况下,各个线程都无法继续向前执行,导致程序无法继续运行。 死锁的四个条件? 互斥条件:线程…

3.6消息队列

实现消息队列实现AB进程对话。 a.A进程发送一句话后&#xff0c;B进程接收到打印。然后B进程发送一句话&#xff0c;A进程接收后打印 b.重复上述步骤。直到AB接收或者发送完quit后&#xff0c;结束AB进程 A: #include <stdio.h> #include <sys/types.h> #inclu…

使用nvidia-ml-py事实监控GPU状态

平时监控GPU状态最常用的是watch配合nvidia-smi指令&#xff0c;但有时可能不仅仅需要监控&#xff0c;还需要记录状态数据&#xff0c;比如GPU的显存变化以及利用率变化等等。本文提供了一个使用nvidia-ml-py包编写的简易Demo&#xff0c;该Demo能够实现简易版的nvidia-smi功能…

C++之获取Windows系统信息

目录 1. 操作系统版本 2. 获取CPU信息 3. 获取内存信息 4. 获取硬盘信息 5.获取网络接口信息 6.获取计算机名称、用户名 在C中&#xff0c;你可以使用Windows API函数来获取Windows系统的各种信息。以下是一些常见的API函数和示例代码&#xff0c;用于获取Windows系统信息…

⁴ 细说IT从业者35岁,真的是职业的转折点吗

IT从业者如何跨过35岁职业门槛是一个很重要的问题。 一 虽然年龄可能会成为一些公司在招聘过程中的考虑因素&#xff0c;但是有一些方法可以帮助你克服这个挑战并继续在IT行业中发展。 首先&#xff0c;持续学习和自我提升非常重要。随着科技的不断发展&#xff0c;IT行业也在不…

STM32使用标准库编写外部时钟控制oled显示计数(proteus仿真)

这节课的结果是在上节课的基础上更改的&#xff1a;电路图为&#xff1a;用一个开关来模拟外部时钟的高低电平的变化。 当然也可以配置一个外部时钟来模拟&#xff0c;也是可以的&#xff1a; 由于这节课的代码是在上节课的基础上有一点修改而来的&#xff0c;所以就只把更改的…

【python高级编程教程】笔记(python教程、python进阶)第三节:(1)多态与鸭子类型(Polymorphism and Duck Typing)

参考文章1&#xff1a;【比刷剧还爽】清华大佬耗时128小时讲完的Python高级教程&#xff01;全套200集&#xff01;学不会退出IT界&#xff01; 参考文章2&#xff1a;清华教授大力打造的Python高级核心技术&#xff01;整整100集&#xff0c;强烈建议学习&#xff08;Python3…

Linux系统运维脚本:备份mysql数据库,并删除旧的数据库备份文件(保留最新的数据库备份)

目 录 一、要求 二、解决方案 &#xff08;一&#xff09;解决思路 &#xff08;二&#xff09;方案 三、脚本程序实现 &#xff08;一&#xff09;脚本代码和解释 1、脚本代码 2、代码解释 &#xff08;二&#xff09;脚本验证 1、脚本编辑 2、给予执行权…

什么是GA版本

软件发布版本的GA版本是什么意思&#xff1f; 一般可用性 (GA) 什么是一般可用性&#xff1f; 一般可用性&#xff08;GA&#xff09;是指向公众发布产品。与主要用于测试和用户反馈的限量发行版或测试版不同&#xff0c;当产品达到一般可用性时&#xff0c;就可以通过公司的一…

代码随想录训练营第50天| 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III 题目链接&#xff1a;123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; class Solution {public int maxProfit(int[] prices) {int[][] dp new int[prices.length][5];if(prices.length 1) {return 0;}dp[0][0] 0;dp[0][1…

C++_程序流程结构_跳转语句_break

break 作用 用于跳出选择结构或循环结构 break使用的时机 出现在switch条件语句中&#xff0c;作用是终止case并跳出switch出现在循环语句中&#xff0c;作用是跳出当前的循环语句出现在嵌套循环中&#xff0c;跳出最近的内层循环语句 示例1 示例2 示例3

C语言结构体的大小,结构体内存对齐

1. 结构体的大小 在自己正真了解过之前&#xff0c;一直认为结构体的大小就是结构体内部成员大小的总和。 但当你去尝试打印结构体的大小时&#xff0c;会发现事实并非如此&#xff0c;也不会像你想的那样简单。 #include <stdio.h>struct S1 {char c1;char c2;int i;…