1123. Lowest Common Ancestor of Deepest Leaves

link to problem

Description:

Given a rooted binary tree, return the lowest common ancestor of its deepest leaves.

Recall that:

  • The node of a binary tree is a leaf if and only if it has no children
  • The depth of the root of the tree is 0, and if the depth of a node is d, the depth of each of its children is d+1.
  • The lowest common ancestor of a set S of nodes is the node A with the largest depth such that every node in S is in the subtree with root A.

Solution:

class Solution:
    def lcaDeepestLeaves(self, root: TreeNode) -> TreeNode:
        
        def helper(node):
            if not node:
                return [node, 0]
            if not node.left and not node.right:
                return [node, 0]
            
            if not node.right:
                left_node, left_dep = helper(node.left)
                return [left_node, left_dep + 1]
            
            if not node.left:
                right_node, right_dep = helper(node.right)
                return [right_node, right_dep + 1]
            
            left_node, left_dep = helper(node.left)
            right_node, right_dep = helper(node.right)
            if left_dep > right_dep:
                return [left_node, left_dep + 1]
            elif left_dep < right_dep:
                return [right_node, right_dep + 1]
            else:
                return [node, left_dep + 1]
        
        return helper(root)[0]

Notes:

DFS

recursion

猜你喜欢

转载自www.cnblogs.com/beatets/p/12170587.html