我正在编写用于从列表L用Python创建二进制搜索树的标准代码。其想法是递归地以格式(数据,left_subtree,right_subtree)打印树。它适用于每个列表,但是当我采用L = range(n)时,它只是不包括第一个元素。
例如,当我这样做时:
输入:
L=[3, 8, 1, 13, 5, 9]
输出:
(3, (1, None, None), (8, (5, None, None), (13, (9, None, None), None))))
但是当我这样做时:
输入:
L=range(4) #L=[0,1,2,3]
输出:
(1,None,(2,None,(3,None,None)))
0到哪里去了?
应该是:
输入:
L=range(4) #L=[0,1,2,3]
输出:
(0,None,(1,None,(2,None,(3,None,None))))
这是我的代码:
class Nodo:
def __init__(self, num):
self.left = None
self.right = None
self.num = num
def insert(self, num):
if self.num:
if num < self.num:
if self.left is None:
self.left= Nodo(num)
else:
self.left.insert(num)
elif num > self.num:
if self.right is None:
self.right = Nodo(num)
else:
self.right .insert(num)
else:
self.num = num
def Print(self,nodo):
if nodo:
return "("+str(nodo.num)+","+self.Print(nodo.left)+","+self.Print(nodo.right )+")"
else:
return "None"
def binary_tree(L):
if len(L)>0:
raiz = Nodo(L[0])
for i in range(1,len(L)):
raiz.insert(L[i])
return raiz.Print(raiz)
else:
return "None"
print(binary_tree(range(4)))
答案 0 :(得分:0)
您有if self.num
,但self.num
为0,因此它的值为false。因此,第二次插入将其在行self.num=num
上的节点0设置为1。