Python 如何从二进制搜索树中获取最小值

Python 如何从二进制搜索树中获取最小值,python,binary-search-tree,Python,Binary Search Tree,我已经创建了一个二进制搜索类,但我正在努力创建一个最小函数来帮助查找二叉树中的最小值 class BinarySearchTree: def __init__(self, data): self.data = data self.left = None self.right = None def insert(self, new_data): if new_data == self.data:

我已经创建了一个二进制搜索类,但我正在努力创建一个最小函数来帮助查找二叉树中的最小值

class BinarySearchTree:

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

    def insert(self, new_data):
        if new_data == self.data:
            return
        elif new_data < self.data:
            if self.left == None:
                self.left = BinarySearchTree(new_data)
            else:
                self.left.insert(new_data)
        else:
            if self.right == None:
              self.right = BinarySearchTree(new_data)
            else: 
              self.right.insert(new_data)

    def create_string(self,spaces):
        info = ' ' * spaces + str(self.data)
        if self.left != None:
            info += '\n(l)' + self.left.create_string(spaces + 4)
        if not self.right == None:
            info += '\n(r)' + self.right.create_string(spaces + 4)
        return info

    def __str__(self):
        representation = self.create_string(0)
        return representation

    def get_left(self):
        return self.left

    def get_right(self):
        return self.right

    def get_data(self):
        return self.data

def minimum(tree):
    if tree.left:
        return minimum(tree.get_left)
    else:
        return tree.get_left
类二进制搜索树:
定义初始化(自身,数据):
self.data=数据
self.left=无
self.right=无
def插入(自身、新_数据):
如果new_data==self.data:
返回
elif新数据
所以我写了最小值函数,但由于某种原因,它总是返回一个非类型错误。有没有人知道如何在二叉树上保留_,直到不再有节点为止

非递归解决方案

def minimum(tree):
    while tree.left is not None:
        tree = tree.left
    return tree.data
非递归解

def minimum(tree):
    while tree.left is not None:
        tree = tree.left
    return tree.data
非递归解

def minimum(tree):
    while tree.left is not None:
        tree = tree.left
    return tree.data
非递归解

def minimum(tree):
    while tree.left is not None:
        tree = tree.left
    return tree.data

如果没有
tree.left
您应该返回
tree

def minimum(tree):
    if tree.left:
        return minimum(tree.get_left)
    else:
        return tree

正如您在问题中提到的,因为没有
树。left
返回
树。get_left
将返回
None
如果没有
树。left
您应该返回

def minimum(tree):
    if tree.left:
        return minimum(tree.get_left)
    else:
        return tree
def minimum(tree):
    if tree.left:
        return minimum(tree.get_left)
    else:
        return tree

正如您在问题中提到的,因为没有
树。left
返回
树。get_left
将返回
None
如果没有
树。left
您应该返回

def minimum(tree):
    if tree.left:
        return minimum(tree.get_left)
    else:
        return tree
def minimum(tree):
    if tree.left:
        return minimum(tree.get_left)
    else:
        return tree

正如您在问题中提到的,因为没有
树。left
返回
树。get_left
将返回
None
如果没有
树。left
您应该返回

def minimum(tree):
    if tree.left:
        return minimum(tree.get_left)
    else:
        return tree
def minimum(tree):
    if tree.left:
        return minimum(tree.get_left)
    else:
        return tree
正如您在问题中提到的,因为没有
树。left
返回
树。get_left
将返回
None

def minimum(tree):
    if tree.left:
        return minimum(tree.get_left)
    else:
        return tree
首先if语句检查tree.left=None,因此返回tree.get\u left返回None

首先if语句检查tree.left=None,因此返回tree.get\u left返回None

首先if语句检查tree.left=None,因此返回tree.get\u left返回None



首先if语句检查tree.left=None,因此返回tree.get\u left返回None。

其他:返回tree.data
应该修复itreturn最小值(tree.get\u left()),即使替换为tree,它仍然返回None类型。get\u left()
其他:返回tree.data
应该修复itreturn最小值(tree.get\u left())即使用树替换,它仍然返回none类型。get_left()
其他:返回树。data
应该修复itreturn最小值(tree.get_left())即使用树替换,它仍然返回none类型。get_left()
其他:返回树。data
应该修复itreturn最小值(tree.get_left())它仍然返回none类型,即使在替换为tree.get_left()之后,编写:
而tree.left:
-部分
不是无的
是多余的。我发现奇怪的是,即使我在cals中定义了“get_left()”,当我在我的最小函数中调用它时,什么都没有显示?,或者只是一个nonetype@Matthew当您
返回tree.get_left
返回最小值(tree.get_left)
时,您不会调用
get_left
。相反,您返回函数或将其传递给
最小值
,而不是其结果。记住,python函数是可以从函数返回或传递给函数的对象。啊,我理解。这是否意味着,如果出现非类型错误,函数就不会返回?@Matthew我想实际上你应该看到
AttributeError
类似于
“非类型”对象没有属性“left”
这样写会更像python:
while tree。left:
-部分
不是None
是多余的。我觉得奇怪的是尽管我已经在cals中定义了“get_left()”,但当我在最小函数中调用它时,什么也没有显示,或者只是一个nonetype@Matthew当您
返回tree.get_left
返回最小值(tree.get_left)
时,您不会调用
get_left
。相反,您返回函数或将其传递给
最小值
,而不是其结果。记住,python函数是可以从函数返回或传递给函数的对象。啊,我理解。这是否意味着,如果出现非类型错误,函数就不会返回?@Matthew我想实际上你应该看到
AttributeError
类似于
“非类型”对象没有属性“left”
这样写会更像python:
while tree。left:
-部分
不是None
是多余的。我觉得奇怪的是尽管我已经在cals中定义了“get_left()”,但当我在最小函数中调用它时,什么也没有显示,或者只是一个nonetype@Matthew当您
返回tree.get_left
返回最小值(tree.get_left)
时,您不会调用
get_left
。相反,您返回函数或将其传递给
最小值
,而不是其结果。记住,python函数是可以从函数返回或传递给函数的对象。啊,我理解。是吗