Python 查找BST中的所有节点是否大于一个项

Python 查找BST中的所有节点是否大于一个项,python,Python,我一直在努力实现下面更大的功能,但我不确定我的逻辑是否有缺陷。据我所知,BST的左边有最小的值,所以我只需要检查BST的左边。有没有更好的方法来写这个,还是我的代码不正确 class BSTNode: """A node is a BST """ def __init__(self: 'BSTNode', item, left, right): self.item, self.left, self.right = item, left, right def al

我一直在努力实现下面更大的功能,但我不确定我的逻辑是否有缺陷。据我所知,BST的左边有最小的值,所以我只需要检查BST的左边。有没有更好的方法来写这个,还是我的代码不正确

class BSTNode:
"""A node is a BST """
    def __init__(self: 'BSTNode', item, left, right):
        self.item, self.left, self.right = item, left, right

    def all_bigger(self, value):
        """
        >>> bst = BSTNode(5, BSTNode(4), BSTNode(6))
        >>> all_bigger(bst, 2)
        True
        """
        while self.left:
            if self.left > value:
                self.value = self.left:
            else:
                return False
        return True

每次比较后都需要更新节点。请检查以下代码:

class BSTNode:
"""A node is a BST """
    def __init__(self: 'BSTNode', item, left, right):
        self.item, self.left, self.right = item, left, right

    def all_bigger(self, value):
        """
        >>> bst = BSTNode(5, BSTNode(4), BSTNode(6))
        >>> all_bigger(bst, 2)
        True
        """
        while self.item:
            if self.left > value:
                self.item = self.left:
            else:
                return False
        return True

IIUC您的问题是查看BST中的所有节点是否都大于某个值

一种简单的方法是在BST中找到具有最小值的节点,并将其与其他值进行比较。最小的节点将是最左边的节点

典型的BST节点如下所示

# A binary tree node
class Node:

    # Constructor to create a new node
    def __init__(self, key):
        self.data = key
        self.left = None
        self.right = None
是的,你是对的。树不需要完全搜索,即可以跳过正确的子树。这就是如何找到具有最小值的节点

def minValue(node):
    current = node

    # loop down to find the lefmost leaf
    while(current.left is not None):
        current = current.left

    return current.data
这可以稍微调整以解决您的问题

def all_bigger(node, val):
    current = node

    # loop down to find the lefmost leaf
    while(current.left is not None):
        current = current.left
        # Check if the current node value is smaller than val
        if current.data < val:
            return False

    return True
def all_biger(节点,val):
当前=节点
#向下循环找到最左边的叶子
而(current.left不是None):
当前=当前。左
#检查当前节点值是否小于val
如果当前数据
您的代码几乎正确,但有一些小错误。更正代码:

class BSTNode:
    """A node is a BST """
    def __init__(self, item, left = None, right = None):
        self.item, self.left, self.right = item, left, right

    def all_bigger(self, value):
        """
        >>> bst = BSTNode(5, BSTNode(4), BSTNode(6))
        >>> all_bigger(bst, 2)
        True
        """
        root = self
        while(root!=None):
            if root.item > value:
                root = root.left
            else:
                return False
        return True

bst = BSTNode(5, BSTNode(4,BSTNode(1, None, None),None), BSTNode(6,None,None)) # Returns False
print(bst.all_bigger(2))

子树中的所有值都大于X当且仅当

  • 节点中的值大于X,并且
  • 其左子树中的所有值(如果存在)都大于X
假设空树为
None

def all_bigger(self, value):
    return self.value > value and self.left and self.left.all_bigger(value)

当t.left:```时,``中没有什么?@DeepakSaini我已经更新了我的代码,对此表示抱歉。:)