-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlowest-common-ancestor-of-a-binary-tree_236.py
45 lines (32 loc) · 1.37 KB
/
lowest-common-ancestor-of-a-binary-tree_236.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.
# According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”
# Example 1:
# 
# Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
# Output: 3
# Explanation: The LCA of nodes 5 and 1 is 3.
# Example 2:
# 
# Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
# Output: 5
# Explanation: The LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.
# Example 3:
# Input: root = [1,2], p = 1, q = 2
# Output: 1
# ---------------------------------------Runtime 62 ms Beats 87.12% Memory 28.7 MB Beats 67.1%---------------------------------------
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":
def iter(node):
if node:
if node == p or node == q:
return node
left, right = iter(node.left), iter(node.right)
return node if left and right else left or right
return iter(root)