【问题标题】:How can I end this BST loop?我怎样才能结束这个 BST 循环?
【发布时间】:2019-03-25 15:16:45
【问题描述】:

我正在求解一个给定数字 n 的 BST 算法,我需要返回小于 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

【问题讨论】:

  • 请使用一致的缩进方案;与某些级别使用 4 个空格和其他级别使用 2 个空格相比,这将使您的代码更易于阅读。

标签: python algorithm binary-search-tree


【解决方案1】:

很酷的算法。

想想当没有左或右时会发生什么:

这可能发生一次,但不再导致最大 == self.root.key 因此不在此处

 if self.root.key < num and self.root.key > largest:
            largest = self.root.key

这不会发生

if self.root.right:

这个也不会

if self.root.left:

但是

self.root 仍然是真的,所以

  while self.root:

会一直运行下去

【讨论】:

  • 哇,非常感谢。我不敢相信我忘了添加一个 else 语句。
猜你喜欢
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 2017-06-25
  • 2020-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多