我试图确定是否在二叉搜索树中找到了值。
如果找到,则打印该值。如果没有,则会打印一条消息,说明找不到该消息。
我的问题是,即使找到该值,也会打印出消息,说明找不到该值。
即使在返回True之后,我的结果似乎也重置了,我很困惑为什么会发生这种情况......我认为这是因为我以递归的方式调用了这个函数,但我并没有这样做。我知道如何解决这个问题。任何帮助将不胜感激,谢谢。
def lookUpVal(bst,val,result):
if bst == None:#base case, if the tree is 0, return none
return
elif bst['data'] == val:
print ("value found")
result = True
return result
lookUpVal(bst['left'],val,result)
lookUpVal(bst['right'],val,result)
def main(bst):
print ("Enter the value you want to find")
val = int(input())
result = 0
lookUpVal(bst,stud,result)
if result != True:
print ("Value not found")
答案 0 :(得分:0)
问题在于你的result
变量,你可能认为你是通过引用传递的,实际发生的事情接近于传值。
以下是一个例子:
def voo(x):
print('x:',id(x))
x = True
print('x:',id(x))
p = False
print('p:',id(p))
voo(p)
print('value of p:',p)
print('p:',id(p))
'id'返回任何对象的唯一ID,当然包括布尔值。 这是输出:(数字会因电脑而异)
p: 1613433952
x: 1613433952
x: 1613433936
value of p: False
p: 1613433952
首先请注意,输出中False
,p
的值未更改。但要了解为什么会发生这种情况,请仔细检查id
值,特别是x
的id在函数赋值后如何更改;这意味着python分配了一个新对象。旧的仍然被'p'引用,正如它的输出中所显示的那样,它没有改变。