擅长:python、mysql、java
<p>我的另一个答案给出了一个新手友好的解决方案,但是如果你想要更有力和简洁的答案:</p>
<pre><code>def Inorder_search_recursive_all(node, key):
if not node:
return
yield from InOrder_search_recursive(node.lChild, key)
if node.value==key:
yield node
yield from InOrder_search_recursive(node.rChild, key)
</code></pre>
<p>这将按顺序在树中生成<em>所有</em>匹配项。它将它们作为迭代器提供给您,因此如果您只需要第一个,您可以在找到一个迭代器时立即停止,而不会浪费工作:</p>
<pre><code>def Inorder_search_recursive(node, key):
return next(Inorder_search_recursive_all(node, key), None)
</code></pre>
<p>关于<a href="http://docs.python.org/3/tutorial/classes.html#iterators" rel="nofollow">Iterators</a>的教程部分和关于生成器的下一部分解释了这一工作的大部分原理。唯一缺少的位是<code>yield from</code>的解释,这在<a href="http://www.python.org/dev/peps/pep-0380/" rel="nofollow">PEP 380</a>中得到了解释。</p>