如何查找二叉树中是否存在值:True或False(Python3)
我试图编写一个代码,如果值存在于二叉树中,那么输出将返回True或False 以下是我的尝试: 定义名为Node的类:如何查找二叉树中是否存在值:True或False(Python3),python,python-3.x,binary-tree,binary-search-tree,lookup,Python,Python 3.x,Binary Tree,Binary Search Tree,Lookup,我试图编写一个代码,如果值存在于二叉树中,那么输出将返回True或False 以下是我的尝试: 定义名为Node的类: class Node: def __init__(self, data): self.data = data self.left = None self.right = None 定义名为BinaryTree+查找函数的类: class BinaryTree: def __init__(self, rootdata): se
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
定义名为BinaryTree+查找函数的类:
class BinaryTree:
def __init__(self, rootdata):
self.root = Node(rootdata)
def LOOKUP(self, lookupval):
if lookupval < self.data:
if (self.left == None):
self.left.LOOKUP(lookupval)
return False
elif lookupval > self.data:
if (self.right == None):
self.right.LOOKUP(lookupval)
return False
else:
return True
但是,我不断得到错误信息,“BinaryTree”对象没有属性“data”
我知道函数查找的定义会有一些错误,
但我是否有可能保留此格式并仍然返回输出:
True
False
谢谢,代码中的问题是:
- 您正在尝试引用
(应改为self.right
,因为我们不在self.root.right
实例上)节点
- 嵌套的if检查错误。如果NOTNone或返回False,则应递归检查左/右树
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
class BinaryTree:
def __init__(self, rootdata):
self.root = Node(rootdata)
def LOOKUP(self, lookupval):
if lookupval < self.root.data:
if self.root.left:
return BinaryTree(self.root.left.data).LOOKUP(lookupval) # recursively check the left tree
else:
return False # can't go any further- so return false
elif lookupval > self.root.data:
if self.root.right:
return BinaryTree(self.root.right.data).LOOKUP(lookupval)
else:
return False
else:
return True
Tree = BinaryTree(24)
Tree.root.left = Node(11)
Tree.root.left.left = Node(199)
Tree.root.left.right = Node(167)
Tree.root.right = Node(2)
Tree.root.right.right = Node(8)
print(Tree.LOOKUP(11))
print(Tree.LOOKUP(13))
您应该像调用
Tree.LOOKUP(11,Tree.root)一样调用LOOKUP
。然后递归地使用self.node.data/left/right
。这棵树应该是一棵二叉搜索树,还是一棵任意的二叉树,没有任何特定的顺序?因为LOOKUP
方法的逻辑(在可以围绕其问题提取的范围内)似乎是针对搜索树的,如果它要正常工作,则需要有顺序。你肯定不是在建一棵有序的树。
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
class BinaryTree:
def __init__(self, rootdata):
self.root = Node(rootdata)
def LOOKUP(self, lookupval):
if lookupval < self.root.data:
if self.root.left:
return BinaryTree(self.root.left.data).LOOKUP(lookupval) # recursively check the left tree
else:
return False # can't go any further- so return false
elif lookupval > self.root.data:
if self.root.right:
return BinaryTree(self.root.right.data).LOOKUP(lookupval)
else:
return False
else:
return True
Tree = BinaryTree(24)
Tree.root.left = Node(11)
Tree.root.left.left = Node(199)
Tree.root.left.right = Node(167)
Tree.root.right = Node(2)
Tree.root.right.right = Node(8)
print(Tree.LOOKUP(11))
print(Tree.LOOKUP(13))
True
False