我正在研究来自https://www.testdome.com/questions/python/binary-search-tree/24973?visibility=1&skillId=9的有关BST的python3问题:
二叉搜索树(BST)是二叉树,其中每个节点的值大于或等于该节点左子树中所有节点的值,并且小于该节点右子树中所有节点的值
编写一个函数,该函数相对于所用时间有效,检查给定的二进制搜索树是否包含给定的值。
例如,对于以下树:
对contains(n2,3)的调用应返回True,因为根为n2的树包含数字3。
我的代码是:
import collections
Node = collections.namedtuple('Node', ['left', 'right', 'value'])
def contains(root, value):
if value == root.value:
return True
if value > root.value:
if root.right != None:
return contains(root.right, value)
else:
if root.left != None:
return contains(root.left, value)
n1 = Node(value=1, left=None, right=None)
n3 = Node(value=3, left=None, right=None)
n2 = Node(value=2, left=n1, right=n3)
print(contains(n2, 3))
它可以工作,但该网站只给了我33分。我发现了一些类似的问题,但它们基于c ++。我想知道有什么方法可以改善我的代码以基于python3获得更好的成绩吗?
谢谢!
答案 0 :(得分:1)
好吧,您的代码永远不会返回False
,因此python会自动返回None
。只需在return False
函数的最后一行添加一个contains
就足够了。
def contains(root, value):
if value == root.value:
return True
if value > root.value:
if root.right != None:
return contains(root.right, value)
else:
if root.left != None:
return contains(root.left, value)
return False