聚云测网站怎么做的夫唯老师seo
LeetCode 1123. 最深叶节点的最近公共祖先
📌 题目描述
给你一棵二叉树,返回最深的所有叶子节点的最近公共祖先(LCA)。
例如,以下树:
3
/
5 1
/| |
6 2 0 8
/
7 4
python
复制
编辑
最深叶子节点是 7 和 4,它们的最近公共祖先是节点 2。
🧠 解题思路
这是一道非常经典的树的后序遍历问题。
我们需要做两件事:
- 找最深的叶子节点
- 找这些最深叶子节点的最近公共祖先
🔁 DFS后序遍历策略:
- 对每个节点递归获取其左子树、右子树的最大深度
- 如果左右子树深度相等,当前节点就是 LCA
- 如果某一边更深,就往那边继续找
🧪 代码实现(Python)
class Solution:def lcaDeepestLeaves(self, root: Optional[TreeNode]) -> Optional[TreeNode]:def dfs(node: Optional[TreeNode]) -> (int, Optional[TreeNode]):if not node:return 0, Noneleft_depth, left_node = dfs(node.left)right_depth, right_node = dfs(node.right)if left_depth > right_depth:return left_depth + 1, left_nodeelif left_depth < right_depth:return right_depth + 1, right_nodeelse:return left_depth + 1, nodereturn dfs(root)[1]
✅ 复杂度分析
时间复杂度:O(n),遍历整棵树一次空间复杂度:O(h),h 是树的高度(递归栈)🌟 总结
这题和「865.具有所有最深节点的最小子树」是同一道题。利用后序遍历(自底向上)结合深度信息,可以一次性得到结果。非常经典的一道树形 DFS 题目!