Let's first visit every node in the tree and count it's value. We can traverse the tree with a dfs.

After we have every value counted, let's look at values with the highest count and return all of them.

```
count = collections.Counter()
def dfs(node):
if node:
count[node.val] += 1
dfs(node.left)
dfs(node.right)
dfs(root)
max_ct = max(count.itervalues())
return [k for k, v in count.iteritems() if v == max_ct]
```

If we are unfamiliar with collections.Counter, we could have also counted the values with a simple dictionary, changing two lines:

```
count = {}
count[node.val] = count.get(node.val, 0) + 1
```