从二叉搜索树返回结果

时间:2018-03-30 06:46:14

标签: recursion binary-tree binary-search-tree

我试图确定是否在二叉搜索树中找到了值。

如果找到,则打印该值。如果没有,则会打印一条消息,说明找不到该消息。

我的问题是,即使找到该值,也会打印出消息,说明找不到该值。

即使在返回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")

1 个答案:

答案 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

首先请注意,输出中Falsep的值未更改。但要了解为什么会发生这种情况,请仔细检查id值,特别是x的id在函数赋值后如何更改;这意味着python分配了一个新对象。旧的仍然被'p'引用,正如它的输出中所显示的那样,它没有改变。