1123. LCA of Deepest Leaves

题目要求 deepest leaves 的LCA,而不是所有leaves的LCA(which is the root),其实就是说,左右子节点高度不一致的话,只考虑高度较高那个(leaf较深);高度一致,则说明当前节点就是其 deepest leaves LCA。根据这个原则往上递归,返回根节点获得的deepest leaves LCA即可。

看到有拿memo记录的解法,其实这题没什么重复运算,每个node肯定只被搜索一次,不需要memo...

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def lcaDeepestLeaves(self, root: TreeNode) -> TreeNode:
        def postorder(root):
            if not root: return (0, None)
            d_l, lca_l = postorder(root.left)
            d_r, lca_r = postorder(root.right)
            if d_l == d_r: # same height => both are deepest, a tie
                return (d_l+1, root)
            if d_l > d_r: # right leaf is deeper than left
                return (d_l+1, lca_l)
            else:
                return (d_r+1, lca_r)
        return postorder(root)[1]

Last updated

Was this helpful?