代码随想录阅读笔记-二叉树【总结】

二叉树的理论基础

  • 代码随想录 (programmercarl.com):二叉树的种类、存储方式、遍历方式、定义方式

二叉树的遍历方式

  • 深度优先遍历
    • 代码随想录阅读笔记-二叉树【递归遍历】-CSDN博客:递归三部曲初次亮相
    • 代码随想录阅读笔记-二叉树【迭代遍历】-CSDN博客:通过栈模拟递归
    • 代码随想录阅读笔记-二叉树【统一迭代法】-CSDN博客
  • 广度优先遍历
    • 代码随想录阅读笔记-二叉树【层序遍历】-CSDN博客:通过队列模拟

求二叉树的属性

  • 代码随想录阅读笔记-二叉树【对称二叉树】-CSDN博客
    • 递归:后序,比较的是根节点的左子树与右子树是不是相互翻转
    • 迭代:使用队列/栈将两个节点顺序放入容器中进行比较
  • 代码随想录阅读笔记-二叉树【最大深度】-CSDN博客
    • 递归:后序,求根节点最大高度就是最大深度,通过递归函数的返回值做计算树的高度
    • 迭代:层序遍历
  • 代码随想录阅读笔记-二叉树【最小深度】-CSDN博客
    • 递归:后序,求根节点最小高度就是最小深度,注意最小深度的定义
    • 迭代:层序遍历
  • 代码随想录阅读笔记-二叉树【完全二叉树节点个数】-CSDN博客
    • 递归:后序,通过递归函数的返回值计算节点数量
    • 迭代:层序遍历
  • 代码随想录阅读笔记-二叉树【平衡二叉树】-CSDN博客
    • 递归:后序,注意后序求高度和前序求深度,递归过程判断高度差
    • 迭代:效率很低,不推荐
  • 代码随想录阅读笔记-二叉树【二叉树的所有路径】-CSDN博客
    • 递归:前序,方便让父节点指向子节点,涉及回溯处理根节点到叶子的所有路径
    • 迭代:一个栈模拟递归,一个栈来存放对应的遍历路径
  • 代码随想录阅读笔记-二叉树【左叶子之和】-CSDN博客
    • 递归:后序,必须三层约束条件,才能判断是否是左叶子。
    • 迭代:直接模拟后序遍历
  • 代码随想录阅读笔记-二叉树【找树左下角的值】-CSDN博客
    • 递归:顺序无所谓,优先左孩子搜索,同时找深度最大的叶子节点。
    • 迭代:层序遍历找最后一行最左边
  • 代码随想录阅读笔记-二叉树【路径总和】-CSDN博客
    • 递归:顺序无所谓,递归函数返回值为bool类型是为了搜索一条边,没有返回值是搜索整棵树。
    • 迭代:栈里元素不仅要记录节点指针,还要记录从头结点到该节点的路径数值总和

二叉树的修改与构造

  • 代码随想录阅读笔记-二叉树【翻转二叉树】-CSDN博客
    • 递归:前序,交换左右孩子
    • 迭代:直接模拟前序遍历
  • 代码随想录-二叉树【从中序与后序遍历序列构造二叉树】-CSDN博客
    • 递归:前序,重点在于找分割点,分左右区间构造
    • 迭代:比较复杂,意义不大
  • 代码随想录阅读笔记-二叉树【最大二叉树】-CSDN博客
    • 递归:前序,分割点为数组最大值,分左右区间构造
    • 迭代:比较复杂,意义不大
  • 代码随想录阅读笔记-二叉树【合并二叉树】-CSDN博客
    • 递归:前序,同时操作两个树的节点,注意合并的规则
    • 迭代:使用队列,类似层序遍历

求二叉搜索树的属性

  • 代码随想录阅读笔记-二叉树【二叉搜索树中的搜索】-CSDN博客

    • 递归:二叉搜索树的递归是有方向的
    • 迭代:因为有方向,所以迭代法很简单
  • 代码随想录阅读笔记-二叉树【验证二叉搜索树】-CSDN博客

    • 递归:中序,相当于变成了判断一个序列是不是递增的
    • 迭代:模拟中序,逻辑相同
  • 代码随想录阅读笔记-二叉树【二叉搜索树的最小绝对差】-CSDN博客

    • 递归:中序,双指针操作
    • 迭代:模拟中序,逻辑相同
  • 代码随想录阅读笔记-二叉树【二叉搜索树中的众数】-CSDN博客

    • 递归:中序,清空结果集的技巧,遍历一遍便可求众数集合

  • 代码随想录阅读笔记-二叉树【二叉搜索树转换为累加树】-CSDN博客
    • 递归:中序,双指针操作累加

    • 迭代:模拟中序,逻辑相同

二叉树公共祖先问题

  • 代码随想录阅读笔记-二叉树【二叉树的最近公共祖先】-CSDN博客
    • 递归:后序,回溯,找到左子树出现目标值,右子树节点目标值的节点。
    • 迭代:不适合模拟回溯
  • 代码随想录阅读笔记-二叉树【二叉搜索树的最近公共祖先】-CSDN博客
    • 递归:顺序无所谓,如果节点的数值在目标区间就是最近公共祖先
    • 迭代:按序遍历

二叉搜索树的修改与构造

  • 代码随想录阅读笔记-二叉树【二叉搜索树的插入】-CSDN博客
    • 递归:顺序无所谓,通过递归函数返回值添加节点
    • 迭代:按序遍历,需要记录插入父节点,这样才能做插入操作
  • 代码随想录阅读笔记-二叉树【删除二叉搜索树节点】-CSDN博客
    • 递归:前序,想清楚删除非叶子节点的情况
    • 迭代:有序遍历,较复杂
  • 代码随想录阅读笔记-二叉树【修剪二叉搜索树】-CSDN博客
    • 递归:前序,通过递归函数返回值删除节点
    • 迭代:有序遍历,较复杂
  • 代码随想录阅读笔记-二叉树【将有序数组转换为二叉搜索树】-CSDN博客
    • 递归:前序,数组中间节点分割
    • 迭代:较复杂,通过三个队列来模拟

总结

在二叉树题目选择什么遍历顺序是不少同学头疼的事情,我们做了这么多二叉树的题目了,给大家大体分分类

  • 涉及到二叉树的构造,无论普通二叉树还是二叉搜索树一定前序,都是先构造中节点。

  • 求普通二叉树的属性,一般是后序,一般要通过递归函数的返回值做计算。

  • 求二叉搜索树的属性,一定是中序了,要不白瞎了有序性了。

注意在普通二叉树的属性中,我用的是一般为后序,例如单纯求深度就用前序,代码随想录阅读笔记-二叉树【二叉树的所有路径】-CSDN博客也用了前序,这是为了方便让父节点指向子节点。

所以求普通二叉树的属性还是要具体问题具体分析。

二叉树专题汇聚为一张图:

这个图是从 代码随想录知识星球引用,总结的非常好,分享给大家。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

编写Markdown时如何爽爽地渲染树?

在使用VitePress/Dumi等静态网站生成时,一般均支持直接在Markdown中渲染显示Vue/React组件,这给个网站非常丰富极致的表现力,我们在创建静态网站时开心的使用各种Vue/React组件,但是在输出树结构时,实际场景中存在几个…

李沐25_使用块的网络VGG——自学笔记

VGG架构 1.多个VGG块后接全连接层 2.不同次数的重复块得到不同的架构 VGG-16、VGG-19 3.更大更深的AlexNet ##经典卷积神经网络的基本组成部分是下面的这个序列: 1.带填充以保持分辨率的卷积层; 2.非线性激活函数,如ReLU; …

【规划算法】A星 与 混合A星

理解概念: A星寻路算法详解(C实现 完整代码图片演示 )_a星算法-CSDN博客 A*算法图解_a*算法流程图-CSDN博客 A星(A*、A Star)路径规划算法详解(附MATLAB代码)_a星算法路径规划-CSDN博客 改进A*算法dwa 本文提出了一种改进的A*…

Tmux 使用笔记

Tmux 是一个终端复用器(terminal multiplexer),非常有用,属于常用的开发工具。 本文记录个人使用 Tmux的命令。 1. tmux简介 命令行的典型使用方式是,打开一个终端窗口,连接计算机,在里面输入…

【刷题】备战蓝桥杯 — dfs 算法

送给大家一句话: 风度真美! 即使流泪,也要鼓掌, 即使失望,也要满怀希望。 ——刘宝增 dfs 算法 1 前言2 洛谷 P1030 [NOIP2001 普及组] 求先序排列题目描述算法思路 3 洛谷 P1294 高手去散步题目描述算法思路 4 蓝桥…

1.2.4 采用Java配置类管理Bean

本实战将演示如何使用Java配置类管理Bean,实现基于注解的IoC容器的配置。 创建新包 在net.huawei.spring根包里创建day04子包。 创建杀龙任务类 在day04子包里创建SlayDragonQuest类。在该类上不添加Component注解。 创建勇敢骑士类 在day04子包里创建BraveKnight…

HarmonyOS开发实例:【分布式数据管理】

介绍 本示例展示了在eTS中分布式数据管理的使用,包括KVManager对象实例的创建和KVStore数据流转的使用。 通过设备管理接口[ohos.distributedDeviceManager],实现设备之间的kvStore对象的数据传输交互,该对象拥有以下能力 ; 1、注册和解除注…

大话设计模式——17.状态模式(State Pattern)

简介 对象的行为依赖于它的状态(属性),可以根据状态的改变而改变相关行为。 UML图: 应用场景: 对象的行为取决于其状态,并且必须要在运行时刻根据状态而改变行为代码中包含大量与对象状态有关的条件语句 …

SMT用料全检抽检

下载地址百度网盘: https://pan.baidu.com/s/1kDn_l8P6ReC4Lj5tgt-v4w?pwd5y41 提取码:5y41 1、扫描输入车间线体 2、根据线体获取在线订单 3、选择(全检|抽检|换接新料)开始 4、根据提示扫描站位和料号核对 5、核对成功再扫描核对下一组

<-泛型->

1.泛型的概念 所谓泛型,就是允许在定义类, 接口 时通过一个"标识"表示类中某个属性的类型或者某个方法的返回值或形参类型.这个类型参数将在使用时确定. 2.举例 (1). 集合类在设计阶段/声明阶段不能确定这个容器到底存的是什么对象,所以在JDK…

✌2024/4/3—力扣—整数反转

代码实现: int reverse(int x) {long num 0;while (x ! 0) {num num * 10 x % 10;x x / 10;}if ((int)num ! num) {return 0;}return (int)num; }

第十四届蓝桥杯大赛软件赛省赛C/C++大学 B 组

第十四届蓝桥杯大赛软件赛省赛C/C大学 B 组 文章目录 第十四届蓝桥杯大赛软件赛省赛C/C大学 B 组1、日期统计2、01串的熵3、冶炼金属4、飞机降落5、接龙数列6、岛屿个数7、子串简写8、整数删除9、景区导游10、砍树 1、日期统计 分析: 本题的意思就是2023年一整年&a…

Docker容器嵌入式开发:在Ubuntu上配置Postman和flatpak

在 Ubuntu 上配置 Postman 可以通过 Snap 命令完成,以下是所有命令的总结: sudo snap install postmansudo snap install flatpak在 Ubuntu 上配置 Postman 和 Flatpak 非常简单。以下是一些简单的步骤: 配置 Flatpak 安装 Flatpak&#x…

unity 寻找隐藏节点 transform.find

由于习惯了godot 的路径寻找,学习unity的时候一直在找类似的方式。最终发现transform.find最相似。 但在寻找隐藏(inactive)的节点遇到了坑。 其实transform.find能不能找到隐藏节点是基于你在find中使用的是绝对路径还是相对路径。 绝对路…

【LAMMPS学习】八、基础知识(1.7) LAMMPS 与 MDI 库代码耦合

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

数据结构和算法:回溯

回溯算法 回溯算法(backtracking algorithm)是一种通过穷举来解决问题的方法,它的核心思想是从一个初始状态出发,暴力搜索所有可能的解决方案,当遇到正确的解则将其记录,直到找到解或者尝试了所有可能的选…

招聘小程序里可以展示详细的岗位信息,方便用户自行报名,省时省力

平台目前规定要通过招聘小程序进行报白。报白通过后就可以在直播间正常招聘了,但是必须挂载小程序,否则还是容易被警告限流。 招聘小程序里可以展示详细的岗位信息,方便用户自行报名,省时省力。 抖音直播招聘报白是一种通过直播…

Day36代码随想录(1刷) 贪心

738. 单调递增的数字 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且数字呈 单调递增 。 示例 1: 输入: n 10 输出: 9示例 2: 输入: n 1234 输出: …

IPEX-LLM(原名BigDL-LLM)环境配置

IPEX-LLM 是一个为Intel XPU (包括CPU和GPU) 打造的轻量级大语言模型加速库&#xff0c;在Intel平台上具有广泛的模型支持、最低的延迟和最小的内存占用。 您可以使用 IPEX-LLM 运行任何 PyTorch 模型&#xff08;例如 HuggingFace transformers 模型&#xff09;。在运行过程中…

顺序表之队列

上一篇博客我们学习了栈的实现&#xff0c;这一篇我们继续学习队列&#xff0c;让我们开始吧&#xff01; 1.认识队列 1.概念&#xff1a;只允许在一端进行插入数据的操作&#xff0c;在另一端进行删除数据的操作的特殊想线性 表&#xff0c;队列具有先进先出…