二叉树03-遍历02

文章讨论了二叉树遍历的方法,涉及节点问题的计算,如最大路径和、监控二叉树的最少摄像头设置、树的直径、平衡性指标等,强调了从节点角度解决问题的重要性以及后序遍历优化的应用实例。
摘要由CSDN通过智能技术生成

二叉树遍历

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

节点独立平级没关系

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. 二叉树中的列表

  • 13
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值