код на самом деле является решением этого вопроса: https://leetcode.com/problems/binary-search-tree-iterator/
это в основном итератор для обхода в порядке следования по BST. Поэтому каждый раз, когда я вызываю next (), он печатает следующее число: сначала 20, потом 30, потом 33..et c.
Я сталкивался с таким решением:
class BSTIterator:
def __init__(self, root):
self.last = root
while self.last and self.last.right:
self.last = self.last.right
self.current = None
self.g = self.iterate(root)
# @return a boolean, whether we have a next smallest number
def hasNext(self):
return self.current is not self.last
# @return an integer, the next smallest number
def next(self):
return next(self.g)
def iterate(self, node):
if node is None:
return
for x in self.iterate(node.left):
yield x
self.current = node
yield node.val
for x in self.iterate(node.right):
yield x
50
/ \
/ \
30 70
/ \ / \
20 40 60 80
/
33
Я пытался отладить его, но я до сих пор не понимаю порядок выполнения команд внутри iterate (), особенно то, что происходит при втором вызове next (). Сочетание саморекурсии с выходом делает его слишком сложным для отслеживания.
Спасибо