两种思路其实本质都是一样的
class Solution(object):
def lowestCommonAncestor(self, root, p, q):
"""
:type root: TreeNode
:type p: TreeNode
:type q: TreeNode
:rtype: TreeNode
"""
def rec(root):
if not root:
return False,False
lp,lq=rec(root.left)
rp,rq=rec(root.right)
flagp=flagq=False
if (lp or lq) and (rp or rq):
self.ans=root
return True,True
if root.val==p.val:
flagp=True
if lq or rq:
self.ans=root
flagq=True
if root.val==q.val:
flagq=True
if lp or rp:
self.ans=root
flagp=True
if lq or rq:
class Solution(object):
def lowestCommonAncestor(self, root, p, q):
"""
:type root: TreeNode
:type p: TreeNode
:type q: TreeNode
:rtype: TreeNode
"""
def rec(root):
if not root:
return False
flagl=rec(root.left)
flagr=rec(root.right)
if root.val==p.val or root.val==q.val:
if flagl or flagr:
self.ans=root
return True
else:
return True
if flagl and flagr:
self.ans=root
return True
elif flagl or flagr:
return True
else:
return False
rec(root)
return self.ans