<p>当你在树的右端仍然有一些自由元素时,你不能得到双零,对吗?在</p>
<p>所以我认为你需要确定什么时候会发生这种情况,并强制重新检查。我可以想出两种方法。在</p>
<ul>
<li><p>创建一个函数,如果你给它根,它会检查你所在的位置。</p></li>
<li><p>创建一个数组并用<code>0</code>、<code>1</code>或{<cd3>}、<code>"R"</code>填充它。如果你有</p>
<ul>
<li><code>ifLeft == ifRight == 0</code></li>
<li><code>len(listDel) > 0</code>和</li>
<li>正在检查阵列:
<ul>
<li><code>If "L" not in check_array</code></li>
<li><code>if len(check_array) == sum(check_array)</code></li>
</ul></li>
</ul></li>
</ul>
<p>重新装东西。在</p>
<p>顺便说一句,您必须在函数的开头向数组中添加检查,并在末尾删除它。所以它的长度是这样的:</p>
<p>0,1,2,3,4,3,2,3,4,5,4,3,2,1,2,3,2,1,0</p>
<pre><code>check_array = []
def generateTree(listAdd, listDel, n):
if not listDel:
return
ifLeft = bool(randint(0,1))
ifRight = bool(randint(0,1))
if (ifLeft + ifRight == 0) and (
"L" not in checked_array) and (
len(listDel) > 0):
// Force a 1, or use randint (you need a while-loop for it)
ifLeft = 1
if ifLeft:
check_array.push("L")
chosen = choice(listDel)
listDel.remove(chosen)
listAdd[n] = (chosen, listAdd[n][1])
generateTree(listAdd, listDel, chosen)
check_array = check_array[:-1]
else:
listAdd[n] = (-1, listAdd[n][1])
if not listDel:
return
if ifRight:
check_array.push("R")
chosen = choice(listDel)
listDel.remove(chosen)
listAdd[n] = (listAdd[n][0], chosen)
generateTree(listAdd, listDel, chosen)
check_array = check_array[:-1]
else:
listAdd[n] = (listAdd[n][0], -1)
</code></pre>