Python 为什么搜索函数返回None?

Python 为什么搜索函数返回None?,python,binary-search-tree,Python,Binary Search Tree,作为一项功课,我必须从给定的数组中构建一个二叉搜索树,并在其上生成一些函数。 search()函数不起作用,我不知道为什么,它总是返回None,即使它应该返回True或False。 在构建函数时,我的代码可能有错误,但上传系统写道,它成功地构建了一棵树 visited = 0 class Node: def __init__(self, value): self.left = None self.right = None self.dat

作为一项功课,我必须从给定的数组中构建一个二叉搜索树,并在其上生成一些函数。
search()
函数不起作用,我不知道为什么,它总是返回
None
,即使它应该返回
True
False
。 在构建函数时,我的代码可能有错误,但上传系统写道,它成功地构建了一棵树

visited = 0

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


class BinarySearchTree:
    def __init__(self):
        self.root = None

    def insert(self, value):
        if self.root is None:
            self.root = Node(value)
        else:
            self._insert(value, self.root)

    def _insert(self, value, curNode):
        if value < curNode.data:
            if curNode.left is None:
                curNode.left = Node(value)
            else:
                self._insert(value, curNode.left)
        else:
            if curNode.right is None:
                curNode.right = Node(value)
            else:
                self._insert(value, curNode.right)

    def fromArray(self, array):
        for i in range(len(array) - 1):
            value = array[i]
            self.insert(value)
            i += 1

    def search(self, value):
        global visited
        if self.root.data is None:
            visited += 1
            return False
        else:
            return self._search(value, self.root)

    def _search(self, value, curNode):
        global visited
        if value == curNode.data:
            visited += 1
            return True
        elif value < curNode.data and curNode.left is not None:
            self._search(value, curNode.left)
        elif value > curNode.data and curNode.right is not None:
            self._search(value, curNode.right)
        else:
            return False

    def min(self):
        global visited
        curNode = self.root
        while curNode.left is not None:
            visited += 1
            curNode = curNode.left
        return curNode

    def max(self):
        global visited
        curNode = self.root
        while curNode.right is not None:
            visited += 1
            curNode = curNode.right
        return curNode

    def visitedNodes(self):
        return visited
visted=0
类节点:
定义初始值(自身,值):
self.left=无
self.right=无
self.data=值
类二进制搜索树:
定义初始化(自):
self.root=None
def插入(自身,值):
如果self.root为无:
self.root=节点(值)
其他:
self.\u插入(值,self.root)
def_插入(自身、值、curNode):
如果值curNode.data和curNode.right不是无:
self.\u搜索(值,curNode.right)
其他:
返回错误
def最小值(自身):
全球访问
curNode=self.root
而curNode.left不是无:
访问次数+=1
curNode=curNode.left
返回curNode
def最大值(自身):
全球访问
curNode=self.root
而curNode.right不是无:
访问次数+=1
curNode=curNode.right
返回curNode
def visitedNodes(自身):
回访
检查您的
\u search()
功能。在第二个或第三个测试用例中,它都不会返回任何内容。如果在python中没有显式定义
返回
,则该方法返回
None

解决办法可能是

def _search(self, value, curNode):
    global visited
    if value == curNode.data:
        visited += 1
        return True
    elif value < curNode.data and curNode.left is not None:
        return self._search(value, curNode.left)
    elif value > curNode.data and curNode.right is not None:
        return self._search(value, curNode.right)
    else:
        return False
def_搜索(self、value、curNode):
全球访问
如果值==curNode.data:
访问次数+=1
返回真值
elif值curNode.data和curNode.right不是无:
返回self.\u搜索(值,curNode.right)
其他:
返回错误
检查您的
\u search()
功能。在第二个或第三个测试用例中,它都不会返回任何内容。如果在python中没有显式定义
返回
,则该方法返回
None

解决办法可能是

def _search(self, value, curNode):
    global visited
    if value == curNode.data:
        visited += 1
        return True
    elif value < curNode.data and curNode.left is not None:
        return self._search(value, curNode.left)
    elif value > curNode.data and curNode.right is not None:
        return self._search(value, curNode.right)
    else:
        return False
def_搜索(self、value、curNode):
全球访问
如果值==curNode.data:
访问次数+=1
返回真值
elif值curNode.data和curNode.right不是无:
返回self.\u搜索(值,curNode.right)
其他:
返回错误

您可能应该将访问的变量设置为树的属性I尝试过,但我不知道如何设置,所以我将其设置为全局将其移动到
\uuuu init\uuuu
中,就像其他变量一样您可能应该将访问的变量设置为树的属性I尝试过,但我不知道如何设置,所以我把它做成了一个全球性的,把它移动到
\uuuu init\uuuu
中,就像另一个一样。是的,就是这样!谢谢你,先生。哦,是的,就是这样!谢谢你,先生。