擅长:python、mysql、java
<p>您的代码总是返回循环中的第一项,因此您的算法过早地结束,并且没有探索所有必要的分支。您可以<code>yield</code>结果来创建生成器函数(除其他方法外):</p>
<pre><code>tree = {"k-b":
{"p-a":
{"c-a":{"o-a":{}, "o-b":{}},
"c-b":{"o-a":{}}},
"p-b":
{"c-a":{"o-a":{},"o-b":{}}}}}
def branches(tree, level):
if level == 0:
yield list(tree.keys())
elif level > 0:
for v in tree.values():
yield from branches(v, level - 1)
for i in range(4):
print(f"level {i}:", list(branches(tree, i)))
</code></pre>
<p>输出:</p>
<pre class="lang-none prettyprint-override"><code>level 0: [['k-b']]
level 1: [['p-a', 'p-b']]
level 2: [['c-a', 'c-b'], ['c-a']]
level 3: [['o-a', 'o-b'], ['o-a'], ['o-a', 'o-b']]
</code></pre>
<hr/>
<p>行<code>elif level > 0:</code>是一种优化,以避免深入到树中</p>
<p>另外,<code>for i in tree.keys()</code>,然后<code>tree[i]</code>访问值可以更清楚地表示为<code>for v in tree.values()</code></p>