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.