当前位置:首页>java>leetcode编程算法随笔 -865. 具有所有最深节点的最小子树

leetcode编程算法随笔 -865. 具有所有最深节点的最小子树

  • 2026-10-21 13:29:58
leetcode编程算法随笔 -865. 具有所有最深节点的最小子树

https://leetcode.cn/problems/smallest-subtree-with-all-the-deepest-nodes/description/

记录这个的目的:

1. 对于递归算法,在过程中它可以"承载"许多信息,有局部的有全局的,适当组合可以降低复杂度。另外需要注意,递归中的顺序。

2. 加大学的比例,降低练习比例。扩展一些看似已知已掌握知识的。

思路1

先dfs或bfs 求出最大深度

然后再找所有深度为最大深度的节点的最近公共祖先

这基本是最笨的方法

思路2

主要参考灵茶山艾府

考虑子树,相对于考虑只节点,多了一些概括与抽象

若一个节点是目标节点,那么它的左右子树深度都是有最大深度的,但在遍历过程中,最大高度不能立即获得,因此需要用全局变量维护。

# 这里注意一个问题,许多时候,当有多个思路看起来可行的时候。很容易在一个看似不可行的点把思路"剪枝"掉。

考虑,这个方法是不是会遗漏一些情况

首先,若一个节点的左右子树的高度不一样,那么它一定不是目标节点。

其次,若一个节点的左右子树高度一样,并且这个高度比原当前的高,那么更新

特殊情况,当一个节点没有子节点,且是最深的节点的时候,它是目标节点

思路3

主要参考leetcode官方

与2相似,但不再维护最大深度的全局变量,虽然不维护全局变量,但是这信息需要以返回数值的形式存着

否则可能会犯错:在递归过程中,后面出现的左右子树高度相等的节点,其高度并没有原来的高

具体的实现

最新文章

随机文章