当前位置: 首页 > article >正文

二叉树03-遍历02

文章目录

  • 二叉树遍历
    • 一棵树通过计算每个节点的问题得答案
    • 节点独立平级没关系
    • 1.一棵树不一定等于其根节点
    • 2.一棵树等于其根节点但非原问题
    • 3.0 树的问题能不能转化为节点问题`关键问题`
    • 3.1 一个节点应该计算什么问题
    • 3.2 一个节点需要哪些信息才能计算问题
  • 待定位置
    • 02 652. 寻找重复的子树
    • 03 124. 二叉树中的最大路径和*
    • 08 1325. 删除给定值的叶子节点
    • 09 865. 具有所有最深节点的最小子树*(推导)
    • 11 968. 监控二叉树(真正的遍历与推导)*
  • 题单顺序01.01(基础)
    • 01 543. 二叉树的直径
    • 02 110. 平衡二叉树
    • 03 563. 二叉树的坡度
    • 04 1026. 节点与其祖先之间的最大差值(遍历/推导)
    • 05 508. 出现次数最多的子树元素和*
    • 06 687. 最长同值路径*
    • 07 1372. 二叉树中的最长交错路径
    • 08 1339. 分裂二叉树的最大乘积
    • 09 2049. 统计最高分的节点数目
    • 10 979. 在二叉树中分配硬币
  • 题单顺序02.02(遍历+推导_后序优化2)
    • 06 663. 均匀树划分🔒
    • 07 1120. 子树的最大平均值🔒
    • 08 1245. 树的直径🔒
  • 题单顺序02.03(综合)
  • 反面例子
    • 437. 路径总和 III*
    • 02 1080. 根到叶路径上的不足节点
    • 572. 另一棵树的子树 == LCR 143. 子结构判断
    • 1367. 二叉树中的列表

二叉树遍历

一棵树通过计算每个节点的问题得答案

节点独立平级没关系

1.一棵树不一定等于其根节点

2.一棵树等于其根节点但非原问题

所以,不能通过根节点子树原问题 判断等不等 根节点
那么如何判断呢

3.0 树的问题能不能转化为节点问题关键问题

3.1 一个节点应该计算什么问题

没错,我们大多时候连一个节点应该计算什么都不知道。

3.2 一个节点需要哪些信息才能计算问题

待定位置

02 652. 寻找重复的子树

map的使用
1.构建时查重

03 124. 二叉树中的最大路径和*

08 1325. 删除给定值的叶子节点

后序推导

09 865. 具有所有最深节点的最小子树*(推导)

具有所有最深节点的最小子树 = 包含树中所有最深节点的最小子树

包含树中最深节点的子树 与 节点的关系
搜索节点是否包含最深节点 同时返回深度。 这个需要先知道最深节点。

一棵树 = 其根节点 但 != 原问题
前序与后序的区别

11 968. 监控二叉树(真正的遍历与推导)*

监控二叉树 = 使每个节点都被监控到的最少摄像头数。
一个摄像头可以监视其父节点、自身及子节点

寻找 监控二叉树 与 一个节点的关系 关键问题
一个节点是否安装摄像头呢
没有被监控安装,被监控不安装。
因此 一个节点安装摄像头 = 节点外的监控范围
而 节点外的监控范围 != 全树的监控范围, 仅= 相邻节点的监控范围
相邻节点的监控范围 = 相邻节点是否有摄像头
相邻节点是否有摄像头 = 相邻节点是否有摄像头
没错这是个递归 即
一个节点是否安装摄像头 = 相邻节点是否安装摄像头
但这是不对的
AB两个节点相邻,那么A依赖B,B依赖A。形成死锁。
所以A不能依赖相邻节点是否安装摄像头。
上述只能说对,但对了一半。A不依赖这个依赖什么。
相邻节点分三个,A应该仅依赖子节点是否安装摄像头,而父节点则仅需知道有无。
A是否安装摄像头 依赖 三个节点是否安装摄像头 死锁
A是否安装摄像头 依赖 两个节点是否安装摄像头,另一个节点有无

题单顺序01.01(基础)

1.遇到递归套递归,则需要反思是否可以在后序位置进行优化。
2.遍历+推导,需要思考是否能在后序位置优化

01 543. 二叉树的直径

二叉树的直径: 是指树中任意两个节点之间最长路径的长度,这条路径可能经过也可能不经过根节点root
树的直径 = 任意两个节点的最长路径

任意 两点的路径 如何找到 与一个节点的关系呢 关键问题
可以观察到
任意 两点的路径 可以转化为 一个节点的路径 关键观察

但此路径并不一定是此节点的最长路径。
因此,要计算一个节点的最长路径。

树的直径 = 任意两个节点的最长路径
任意两个节点间路径 = 一个节点的路径
一个节点的最长路径 = 该节点子树深度之和

02 110. 平衡二叉树

树的平衡 = 每个节点的左右两个子树的高度差的绝对值不超过 1

03 563. 二叉树的坡度

树的坡度 = 节点的坡度之和
一个节点的坡度 = 该节点左子树的节点和与右子树节点和差的绝对值

04 1026. 节点与其祖先之间的最大差值(遍历/推导)

一个节点与其祖先的最大差值 = 仅需祖先的最大最小

05 508. 出现次数最多的子树元素和*

树的问题 = 次数最多的子树元素和
一个节点的子树元素和 = 该节点左子树的子树元素和与右子树的子树元素和*
如果一个节点的问题可以由该节点子树同样的问题推导而来,那么此时,节点并非代表节点,而是一棵树 例如 上述一个节点的元素和可以由该节点子树同样的问题推导而来,那么此时,这个和代表的就不是一个节点了,而是这棵树
但这个并非原问题,原问题是root节点次数最多,但不能由root子树同样问题推导,因此不能代表root树。

map的使用2:
构建时计算最大的v

06 687. 最长同值路径*

树的问题 = 最长的同值路径
任意两个节点的同值路径 = 一个节点的同值路径 同样的,此路径并非该节点最长同值路径
一个节点的最长同值路径 = 该节点子树同值深度之和
后序优化不能乱剪枝

07 1372. 二叉树中的最长交错路径

二叉树的最长交错路径
任意两点的交错路径 = 一个节点的交错路径。同理,此路径并非该节点最长
一个节点的最长交错路径 = 该节点子树交错深度max + 1

08 1339. 分裂二叉树的最大乘积

分裂二叉树的最大乘积 = 删除1条边,使树分裂成两棵子树。求最大的子树和的乘积。

任意 删除1条边后分裂的两棵子树 如何找到 与一个节点的子树和关系 关键问题
可以观察到关键观察
任意 删除1条边后分裂的两棵子树 可以转化 为 整棵树的和-此节点的树的和

09 2049. 统计最高分的节点数目

统计最高分的节点数目
一个节点的分数 = 将该节点的边全部删除,剩余若干个子树,这些子树大小的乘积。
任意 删除某节点全部边后 如何找到 与该节点子树大小的关系呢 关键问题
可以观察到关键观察
任意 删除任意节点全部边后的子树大小 = 该节点的子树大小 + (整棵树-该节点大小)

此题主要在于树为vector

10 979. 在二叉树中分配硬币

在二叉树中分配硬币 = 使每个节点有一枚硬币的最少移动次数

在二叉树中分配硬币 如何找到 与一个节点的关系呢 关键问题
我们可以先随便试一下
一个节点的移动次数 = 节点值 - 1
你会发现这并非最少,这会带来重复。关键观察
而重复的关键在于 一个节点已经计算过了,而另一个节点不知道,却依旧再计算一遍。关键观察
那么问题来了,一个节点的移动次数 = 多少次 才会不重复关键问题
一个节点直接计算其树的账就可省去某一节点重复计算了关键思想
一个节点的移动次数 = 节点树的账 = 树值 - 树大小
节点平级:我们会发现,根节点的账就是整棵树的账。但整棵树的账!=整棵树的最少移动次数。整棵树的账=根节点的移动次数。而整棵树的最少移动次数 = 所有节点的移动次数相加。这是节点平级的真谛

题单顺序02.02(遍历+推导_后序优化2)

06 663. 均匀树划分🔒

07 1120. 子树的最大平均值🔒

08 1245. 树的直径🔒

题单顺序02.03(综合)

反面例子

437. 路径总和 III*

02 1080. 根到叶路径上的不足节点

节点需要返回值的不能遍历

572. 另一棵树的子树 == LCR 143. 子结构判断

遍历推导,不能优化

1367. 二叉树中的列表


http://www.kler.cn/a/162637.html

相关文章:

  • [ 网络安全介绍 5 ] 为什么要学习网络安全?
  • android dvr黑屏
  • 物理设备命名规则(Linux网络服务器 15)
  • spring中r类是什么
  • 解决表格出现滚动条样式错乱问题
  • ubuntu cmake CPack将第三方库进行打包
  • vuepress-----13、分割config
  • zotero关闭翻译自动创建标签
  • openlayers地图使用---跟随地图比例尺动态标绘大小的一种方式2
  • 身份认证技术
  • leetcode 面试题 02.02. 返回倒数第k个节点
  • 【小布_ORACLE笔记】Part11-6 RMAN Backups
  • 【Flink系列四】Window及Watermark
  • 小白理解GPT的“微调“(fine-tuning)
  • 数据库隔离级别:从并发冲突到数据一致性的演进历程
  • PVE系列-LVM安装MacOS的各个版本及VNC加密隧道访问
  • 二百一十四、Linux——Linux系统时间比电脑时间慢5分钟
  • K8s 入门指南(一):单节点集群环境搭建
  • 【VSCode】自定义配置
  • 元宇宙:重塑游戏行业体验下一个前沿
  • Linux篇之基于Centos的everything镜像搭建yum镜像源
  • 数据库基础概念与范式反范式总结
  • 配置BFD多跳检测示例
  • Remix IDE 快速开始Starknet
  • html之JS
  • ChatGPT论文降重:从97%到5%