二叉树-遍历-重写

文章目录

遍历

寻找任意一个节点与res的关系

遍历的功能

我们应该明确遍历的功能,以知道遍历能做的,遍历不能做的。

1.节点可以获取根节点向下到此节点的路径,但不能获取此节点向上到根节点的路径

如下
257. 二叉树的所有路径*
112. 路径总和*
113. 路径总和 II*
988. 从叶结点开始的最小字符串*
437. 路径总和 III*
1457. 二叉树中的伪回文路径*

2.遍历无法记录任意两个节点的路径

但任意两个节点的路径必通过某个根节点。因此可以转化为一个节点。
如下
543. 二叉树的直径(3/1)*
124. 二叉树中的最大路径和(3/1)*

总结:对于单个节点,能获取到的只有根节点向下到此节点的路径上的信息及其向下子树的相关信息。其他全是未知。

因为其他节点已退出。
那为什么不能保存其记录呢。
因为正确退出需要全局记录也推出,所以不能记录。
详见:遍历原理。

注意:return并非终止遍历,而是终止该节点返回父节点。

如 971. 翻转二叉树以匹配先序遍历

视频

01 144. 二叉树的前序遍历

02 94. 二叉树的中序遍历

03 145. 二叉树的后序遍历

04 589. N 叉树的前序遍历

05 590. N 叉树的后序遍历

06 104. 二叉树的最大深度

07 559. N 叉树的最大深度

08 111. 二叉树的最小深度

09 112. 路径总和*

10 113. 路径总和 II*

关于前向遍历与后向遍历

11 226. 翻转二叉树

12 404. 左叶子之和(1/2)

构造及序列化

01 1325. 删除给定值的叶子节点(1/2)*

1.删除需要引用
2.需要先设置nullptr再delete

02 617. 合并二叉树(1/2)*

当节点不仅操作自己,还需要操作子节点时,遍历往往变得麻烦。
如果节点既操作自己,又操作子节点,则下一个节点会重复。
因此节点只能操作子节点。

优化:修改可以使用引用优化

二叉搜索树

01 938. 二叉搜索树的范围和(1/2)

页面

纲领

01 543. 二叉树的直径(3/1)*

任意两个节点的路径必定通过某个根节点。
因此可以转化为某个节点。
通过记录每个节点的最长路径 得出
任意两个节点的最长路径。

思维

01 116. 填充每个节点的下一个右侧节点指针▲(3/1/2)*

后序

01 652. 寻找重复的子树(3/1)*

1.遍历时查询重复
2.序列化的构造

强化训练-遍历

遍历1

01 257. 二叉树的所有路径*

02 129. 求根节点到叶节点数字之和*

遍历时计算和

03 199. 二叉树的右视图

04 298. 二叉树最长连续序列🔒

05 988. 从叶结点开始的最小字符串*

无法记录节点向上到根节点的路径(后序遍历无法记录路径)
reverse可以原地逆转。
string可以+=char
compare就是按照字典序进行比较

06 1022. 从根到叶的二进制数之和

07 1457. 二叉树中的伪回文路径*

回文的判断

遍历2

01 270. 最接近的二叉搜索树值🔒

617. 合并二叉树(1/2)*

02 623. 在二叉树中增加一行

03 971. 翻转二叉树以匹配先序遍历*

此题的关键在于遍历与数组的索引对照。
也可换种角度。即
树的前序索引与数组的对照。
先行题:226

04 987. 二叉树的垂序遍历*

非遍历:无法找到与res的关系
给一个节点r,c无法找到其在res的位置。
所以只能按要求将所有元素排列。
然后按照顺序构造res时。

05 993. 二叉树的堂兄弟节点

06 1315. 祖父节点值为偶数的节点和

07 1448. 统计二叉树中好节点的数目

08 1469. 寻找所有的独生节点🔒

09 1602. 找到二叉树中最近的右侧节点🔒

遍历3

01 437. 路径总和 III*有待修改

非任意两个节点。
可以看到,每个节点仅需记录向上的路径即可。
但节点无法记录向上到根节点的路径。
而题目不要求路径,仅要求路径和。路径和则无所谓
所以,利用前缀和,实现向上查询路径和的目标

02 513. 找树左下角的值

03 666. 路径总和 IV🔒

04 1261. 在受污染的二叉树中查找元素

set 通过count检索,insert插入

05 572. 另一棵树的子树(1/2)

06 1367. 二叉树中的列表(1/2)

强化训练-推导

03 124. 二叉树中的最大路径和(3/1)*

任意两个节点的路径无法记录
但可以记录最大路径和的两个节点路径。

强化训练-后序

01 110. 平衡二叉树(3/1)

02 508. 出现次数最多的子树元素和(3/1)

03 563. 二叉树的坡度(3/1)

01 1026. 节点与其祖先之间的最大差值(3/1)

02 1339. 分裂二叉树的最大乘积(3/1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值