2014-12-07 265 views
2

我已经实现了一个简单的树,我有这个问题。当我尝试搜索节点并且它存在时,它将返回无,即使它在查找方法中的if语句处运行打印。当我查找根节点时,它运行正常。所有其余节点都返回None。有人能解释为什么吗?Python二叉树

class Node(): 
    def __init__(self,data): 
     self.right = None 
     self.left = None 
     self.data = data 

    def insert(self,data): 
     if self.data == data: 
      print "this item exists" 
     elif self.data > data: 
      if self.left == None: 
       self.left = Node(data) 
      else: 
       self.left.insert(data) 
     else: 
      if self.right == None: 
       self.right = Node(data) 
      else: 
       self.right.insert(data) 

    def print_nodes(self): 
     if self.left: 
      self.left.print_nodes() 
     print self.data 
     if self.right: 
      self.right.print_nodes() 

    def lookup(self,data): 
     if self.data == data: 
      print 'exists' 
      return 1 
     elif self.data > data: 
      if self.left != None: 
       self.left.lookup(data) 
      else: 
       return -1 
     elif self.data < data: 
      if self.right != None: 
       self.right.lookup(data) 
      else: 
       return -1 


    def delete(self,data): 
     if self.lookup(data)== -1: 
      print "doesnot exists" 
     else: 
      if (not self.left) and (not self.right): 
       self.data = None 

root = Node(5) 
#root.insert(3) 
root.insert(3) 
root.insert(2) 
root.insert(6) 
root.insert(61) 
root.insert(62) 
root.insert(63) 

x = root.lookup(3) 
print x 
+1

您不会从递归调用中返回查找结果。 – walkytalky 2014-12-07 13:20:21

回答

3

当项目是不是在根目录中,你打电话给其儿子lookup()功能,而无需返回自己的价值,所以即使代码某处发现在树中的数据,你得到的结果None值,而不是(1/-1

替换此行:与线

self.left.lookup(data) 
... 
self.right.lookup(data) 

return self.left.lookup(data) 
... 
return self.right.lookup(data) 
+0

该死的我是一个白痴...谢谢 – 2014-12-07 13:24:26