有什么方法可以改善针对二进制搜索树问题的py3代码?

时间:2019-08-14 03:10:48

标签: python-3.x binary-search-tree

我正在研究来自https://www.testdome.com/questions/python/binary-search-tree/24973?visibility=1&skillId=9的有关BST的python3问题:

二叉搜索树(BST)是二叉树,其中每个节点的值大于或等于该节点左子树中所有节点的值,并且小于该节点右子树中所有节点的值

编写一个函数,该函数相对于所用时间有效,检查给定的二进制搜索树是否包含给定的值。

例如,对于以下树:

  • n1(值:1,左:null,右:null)
  • n2(值:2,左:n1,右:n3)
  • n3(值:3,左:null,右:null)

对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获得更好的成绩吗?

谢谢!

1 个答案:

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