19

东哥带你刷二叉树(后序篇)

 1 year ago
source link: https://labuladong.github.io/algo/2/19/37/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

东哥带你刷二叉树(后序篇)

souyisou1.png

通知: 持续更新中, 开始报名, 开始预约。

读完本文,你不仅学会了算法套路,还可以顺便解决如下题目:

牛客 LeetCode 力扣 难度
- 🟠

———–

PS:

集成了手把手刷二叉树功能,按照公式和套路讲解了 150 道二叉树题目,可手把手带你刷完二叉树分类的题目,迅速掌握递归思维。

本文是承接

的第四篇文章,主要讲二叉树后序位置的妙用,复述下前文关于后序遍历的描述:

前序位置的代码只能从函数参数中获取父节点传递来的数据,而后序位置的代码不仅可以获取参数数据,还可以获取到子树通过函数返回值传递回来的数据。

那么换句话说,一旦你发现题目和子树有关,那大概率要给函数设置合理的定义和返回值,在后序位置写代码了

多说无益,我们直接看题,这是力扣第 652 题「

」:

title.png

函数签名如下:

List<TreeNode> findDuplicateSubtrees(TreeNode root);

我来简单解释下题目,输入是一棵二叉树的根节点 root,返回的是一个列表,里面装着若干个二叉树节点,这些节点对应的子树在原二叉树中是存在重复的。

说起来比较绕,举例来说,比如输入如下的二叉树:

1.png

首先,节点 4 本身可以作为一棵子树,且二叉树中有多个节点 4:

2.png

类似的,还存在两棵以 2 为根的重复子树:

3.png

那么,我们返回的 List 中就应该有两个 TreeNode,值分别为 4 和 2(具体是哪个节点都无所谓)。

这题咋做呢?还是老套路,先思考,对于某一个节点,它应该做什么

_____________

应合作方要求,本文不便在此发布,请扫码关注回复关键词「二叉树」或

查看:

qrcode.jpg

共同维护高质量学习环境,评论礼仪见这里,违者直接拉黑不解释


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK