题解 | #在二叉树中找到两个节点的最近公共祖先# 树形DP 模板

在二叉树中找到两个节点的最近公共祖先

http://www.nowcoder.com/practice/e0cc33a83afe4530bcec46eba3325116

欢迎 Star:imhuay/studies

class Solution:
    def lowestCommonAncestor(self , root: TreeNode, o1: int, o2: int) -> int:
        
        from dataclasses import dataclass
        
        @dataclass
        class Info:
            has_o1: bool  # 以当前结点为根节点的树中是否存在 o1
            has_o2: bool  # 以当前结点为根节点的树中是否存在 o2
            ret: int  # o1 和 o2 的最近公共祖先

        def dfs(x):
            if not x: return Info(False, False, None)
            
            l, r = dfs(x.left), dfs(x.right)
            has_o1 = l.has_o1 or r.has_o1 or x.val == o1
            has_o2 = l.has_o2 or r.has_o2 or x.val == o2
            ret = l.ret or r.ret or x.val if has_o1 and has_o2 else None
            return Info(has_o1, has_o2, ret)
        
        return dfs(root).ret
            
全部评论

相关推荐

沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务