zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    java爬取Excel表格
    drf-view
    django--View
    tornado的Application的一些事儿
    tornado的路由分发
    线程和asyncio的比较
    GIL
    else的使用
    协程
    生成器代替迭代器
  • 原文地址:https://www.cnblogs.com/beatets/p/12170587.html
Copyright © 2011-2022 走看看