Python 如何结束这个BST循环?
我正在求解一个BST算法,给定一个数字n,我需要返回小于n的最大值。不幸的是,一旦我找到了答案。我的代码不返回它,但继续循环。我错过了什么?谢谢Python 如何结束这个BST循环?,python,algorithm,binary-search-tree,Python,Algorithm,Binary Search Tree,我正在求解一个BST算法,给定一个数字n,我需要返回小于n的最大值。不幸的是,一旦我找到了答案。我的代码不返回它,但继续循环。我错过了什么?谢谢 class Node: # Constructor to create a new node def __init__(self, key): self.key = key self.left = None self.right = None self.parent = None # A bina
class Node:
# Constructor to create a new node
def __init__(self, key):
self.key = key
self.left = None
self.right = None
self.parent = None
# A binary search tree
class BinarySearchTree:
# Constructor to create a new BST
def __init__(self):
self.root = None
def find_largest_smaller_key(self, num):
largest = 0
while self.root:
if self.root.key < num and self.root.key > largest:
largest = self.root.key
if self.root.right:
if self.root.right.key < num and self.root.right.key > largest:
self.root = self.root.right
if self.root.left:
if self.root.left.key < num and self.root.left.key > largest:
largest = self.root.left.key
self.root = self.root.left
return largest
类节点:
#构造函数来创建新节点
def uuu init uuuu(self,key):
self.key=key
self.left=无
self.right=无
self.parent=None
#二叉搜索树
类二进制搜索树:
#构造函数来创建新的BST
定义初始化(自):
self.root=None
def查找\u最大\u较小\u键(self,num):
最大值=0
而self.root:
如果self.root.key最大:
最大=self.root.key
如果self.root.right:
如果self.root.right.key最大:
self.root=self.root.right
如果self.root.left:
如果self.root.left.key最大:
最大=self.root.left.key
self.root=self.root.left
回报最大
很酷的算法
想想当没有左或右时会发生什么:
这可能会发生一次,但不再导致max==self.root.key因此不在这里
if self.root.key < num and self.root.key > largest:
largest = self.root.key
这也不会
if self.root.left:
但是
self.root仍然是真的,所以
while self.root:
将永远运行请使用一致的缩进方案;与某些级别使用4个空格,其他级别使用2个空格相比,这将使代码更易于阅读。谢谢。我会修好的。哇,太棒了,谢谢。我真不敢相信我竟然忘了添加一个else语句。
while self.root: