classSolution:deflowestCommonAncestor(self, root:'TreeNode', p:'TreeNode', q:'TreeNode')->'TreeNode':defdfs(root):ifnot root or root==p or root==q:return root
l=dfs(root.left)
r=dfs(root.right)if l and r:return root
if l or r:return l or r
returnreturn dfs(root)
defdfs(root):ifnot root or root==p or root==q:return root
l,r=None,Noneif p.val<root.val and q.val<root.val:l=dfs(root.left)elif p.val>root.val and q.val>root.val:r=dfs(root.right)else:
l=dfs(root.left)
r=dfs(root.right)if l and r:return root
if l or r:return l or r
returnreturn dfs(root)