二叉树路径相关技巧

112. 路径总和

113. 路径总和 II

437. 路径总和 III

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

543. 二叉树的直径

687. 最长同值路径

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

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

1367. 二叉树中的列表

 

OMG OMG OMG OMG!!!自闭了,又遇到了一个很烦很烦很烦类型的题目

可以先去看文章 二叉树--纲领篇,熟悉二叉树的核心要义!前文介绍过树相关题目所用到的方法无非两种「分解子问题」&&「遍历」,详情可见 二叉树「遍历」And「分解」

同时也可以去看看本人总结的一篇关于二叉搜索树经典题目的文章,里面详细的分析了用递归解决问题时需要明确的要素,详情可见 二叉搜索树(BST)

接下来先梳理一下路径相关题目的形式

路径总和

详情可见题目 路径总和

这个题目很简单,没什么好说的,直接看代码

路径总和 II

详情可见题目 路径总和 II

这个题目有点意思,「分解子问题 && 遍历」都可以写出来,只不过两个方法的麻烦程度简直不能比!!!

本题和这个里面的「二叉树所有路径」很像,可以参考 传送门

路径总和 III

详情可见题目 路径总和 III

这个题目需要用到「前缀和」的思想,详情可见 前缀和技巧

从叶结点开始的最小字符串

详情可见题目 从叶结点开始的最小字符串

其实这个题目就是遍历出所有路径,然后比较路径的大小

只不过比较的时候有点麻烦,涉及到了字符串的比较

二叉树的直径

详情可见题目 二叉树的直径

思路:分解子问题,当前节点的直径和 = 左子树的高度 + 右子树的高度

技巧:利用后序遍历,刚好可以一边求高度,一边取最值;不然就需要一次次的重复求好多次高度

⚠️ 区分清楚 高度 && 深度

二叉树中的最大路径和

详情可见题目 二叉树中的最大路径和

这个题目难度是 hard,看起来吓一跳,但是本人一开始瞎摸索,居然写出来了,但是没有其他人的解法妙

突然看到了一篇面经,有的面试官需要让你输出最长和的路径,下面来实现一下:

最长同值路径

详情可见题目 最长同值路径

当时一瞅,不知道何从下手;直到看到了一句提醒,有了启发 返回和当前节点值相同的最大高度 说白了就是搞清楚递归三要素中返回值的含义

是不是感觉一下把正确代码给出,看似太简单了

直接上几个本人自闭时候的错误版本(核心代码部分)

二叉树中的最长交错路径

详情可见题目 二叉树中的最长交错路径

这个题目很有意思,本人一开始想到的就是分解子问题,结果把自己绕来绕去 绕晕了 😭😭😭

下面是分解的解法,可惜超时 😭😭😭

不过可以体会一下这种思想,即:最优解可能不在当前节点

下面是进行了优化的解法,该解法很巧妙。利用一个数组,数组的第一个数表示当前节点向左搜索的结果,数组的第二个数表示当前节点向右搜索的结果

二叉树中的列表

详情可见题目 二叉树中的列表

这个题目也是变相的一种寻找路径,判断是否存在符合的路径

这个题目和上面的题目很像,如果利用「分解子问题」的思想去写更像

正确解可能是当前节点,也可能是孩子节点开始