Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何结束这个BST循环?_Python_Algorithm_Binary Search Tree - Fatal编程技术网

Python 如何结束这个BST循环?

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

我正在求解一个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 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: