<p>看起来您正在解决今天的CodeSignal挑战。这是我的Python3解决方案。希望能有帮助</p>
<pre><code>#
# Binary trees are already defined with this interface:
# class Tree(object):
# def __init__(self, x):
# self.value = x
# self.left = None
# self.right = None
def findCommonValues(t1, t2):
def dfs(node:Tree, vals:list, comparison:dict=None):
"""Run a depth-first search on the tree by passing the root. If comparison is passed, then it
is used to determine if we should add the value of node to the vals list. Otherwise, always
add value to the vals list."""
if not node:
return
if node.left:
dfs(node.left, vals, comparison)
if comparison is None or node.value in comparison:
vals.append(node.value)
if node.right:
dfs(node.right, vals, comparison)
# Create an empty list and use it to gather all the values from the first Tree
vals = []
dfs(t1, vals)
# This line coverts my list to a dict, where each item in the list is a key, and the val is
# arbitrary (it will just be an incremented int here). This way, we can search for previous values
# with constant run time.
comparison = {k: v for v, k in enumerate(vals)}
# Reset the list and process the 2nd Tree
vals = []
dfs(t2, vals, comparison)
# Now the vals list has what we're looking for, thanks to line 17 in dfs
return vals
</code></pre>
<p>对于那些在未来关注这一点的人来说,<a href="https://app.codesignal.com/challenge/6ZAh6MgWdxTMKhACH" rel="nofollow noreferrer">here</a>是一个与CodeSignal挑战(以前是CodeFights)的链接</p>