• 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

  • 相关阅读:
    读写配置文件app.config
    UML类图
    我见到James Rumbaugh了!
    获取数据库中的所有表
    通过DataTable获得表的主键
    用例的本质
    用例图
    使用SQLDMO中“接口SQLDMO.Namelist 的 QueryInterface 失败”异常的解决方法
    类如何与界面绑定
    C#使用指针
  • 原文地址:https://www.cnblogs.com/beatets/p/12170587.html
Copyright © 2020-2023  润新知