leetcode-236-二叉树的最近公共祖先*
题目描述:


方法一:
# 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': ans = None def helper(root): nonlocal ans if not root: return False left = helper(root.left) right = helper(root.right) mid = root.val==p.val or root.val==q.val if mid + left + right >= 2: ans = root return mid or left or right helper(root) return ans
另:*
class Solution: def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode': if root in (None ,p,q): return root L = self.lowestCommonAncestor(root.left,p,q) R =self.lowestCommonAncestor(root.right,p,q) return R if None==L else L if None==R else root
法二:转为相交链表找最近交点 见题160 理解:a+all+b = b+all+a
class Solution: def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode': dic={root:None} def bfs(node): if node: if node.left:dic[node.left]=node if node.right:dic[node.right]=node bfs(node.left) bfs(node.right) bfs(root) l1,l2=p,q while(l1!=l2): l1=dic.get(l1) if l1 else q l2=dic.get(l2) if l2 else p return l1
浙公网安备 33010602011771号