Very short recursion algorithm. I think it should be correct. But on the last test case it gave the wrong answer, not TLE.
class Solution(object): def lowestCommonAncestor(self, root, p, q): Solution.node = None def dfs(root, p, q): if not root: return 0 else: res = dfs(root.left,p,q)+dfs(root.right,p,q) + (root.val == p.val or root.val == q.val) if res == 2 and not Solution.node: Solution.node = root return res dfs(root,p,q) return Solution.node
OK Now I get it, should change the mid line to
(root == p or root == q)
not comparing to the .val. Yes there could be duplicates here.