236. 二叉树的最近公共祖先
题目描述
解题思路
1、 哈希表记录每个节点的父节点
2、辅助数组记录p节点从下往上经过的节点
3、q节点从下往上找,遇到已遍历过的节点即为最近公共祖先
官方第一种解法会简洁很多,但需要理解其含义。
代码实现
# 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':
"""
1. 哈希表记录每个节点的父节点
2. 辅助数组记录p节点从下往上经过的节点
3. q节点从下往上找,遇到已遍历过的节点即为最近公共祖先
"""
my_dict = {}
def dfs(root):
if not root:
return
if root.left:
my_dict[root.left.val] = root
if root.right:
my_dict[root.right.val] = root
dfs(root.left)
dfs(root.right)
dfs(root)
visited = []
while p:
visited.append(p.val)
p = my_dict.get(p.val)
while q:
if q.val in visited:
return q
q = my_dict.get(q.val)
return None
参考文献
1、官方题解