Python 查找BST中的所有节点是否大于一个项
我一直在努力实现下面更大的功能,但我不确定我的逻辑是否有缺陷。据我所知,BST的左边有最小的值,所以我只需要检查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
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我已经更新了我的代码,对此表示抱歉。:)