Leetcode - Lowest Common Ancestor of a Binary Tree

2023-11-14 @ushimaru08


Lowest Common Ancestor of a Binary Tree

以下の問題を解いていく。DFS を用いて解答する。

https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/

Explanation

p と q には 3 通りの存在の仕方がある。すなわち、root から見て「p,q がともに左側のツリーに存在する」、「p,q がともに右側のツリーに存在する」、「p,q が左と右のツリーに別々で存在する」パターンである。 一つ目の二つ目のパターンの場合、先に iterate された node の値が LCA となるので、その値を返却する。3 つ目のパターンの場合、root が LCM となるので、その値を返却する。

Code

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        if not root: return None
        if root == q or root == p: return root

        left = self.lowestCommonAncestor(root.left, p, q)
        right = self.lowestCommonAncestor(root.right, p, q)

        if not left: return right
        if not right: return left

        return root