返回
在LeetCode 173 中用Python构建二叉搜索树迭代器:优化,简洁且优雅
闲谈
2023-09-20 06:20:31
概述
在LeetCode 173中,您需要实现一个二叉搜索树迭代器类BSTIterator,表示一个按中序遍历二叉搜索树(BST)的迭代器。二叉搜索树是一种特殊类型的二叉树,其中每个节点的值都比其左子树中的所有值大,并且比其右子树中的所有值小。中序遍历是指从最左边的叶子节点开始,依次访问每个节点,最后访问最右边的叶子节点。
实现细节
class BSTIterator:
def __init__(self, root):
# 将栈初始化为空列表
self.stack = []
# 将当前节点初始化为根节点
self.current = root
def next(self):
# 循环,直到栈为空或到达最左边的叶子节点
while self.current or self.stack:
# 如果当前节点不为空,则将其压入栈中并继续向左移动
while self.current:
self.stack.append(self.current)
self.current = self.current.left
# 如果栈不为空,则弹出栈顶元素并将其赋值给当前节点
if self.stack:
self.current = self.stack.pop()
# 返回当前节点的值
val = self.current.val
# 将当前节点移动到其右子树
self.current = self.current.right
# 返回当前节点的值
return val
# 如果栈为空且当前节点为空,则说明已经到达了最后一个节点
return None
def hasNext(self):
# 如果栈不为空或当前节点不为空,则返回True,否则返回False
return self.stack or self.current
运行示例
# 创建二叉搜索树
root = TreeNode(10)
root.left = TreeNode(5)
root.right = TreeNode(15)
root.left.left = TreeNode(2)
root.left.right = TreeNode(7)
root.right.left = TreeNode(12)
root.right.right = TreeNode(20)
# 创建BSTIterator对象
iterator = BSTIterator(root)
# 使用迭代器遍历二叉搜索树
while iterator.hasNext():
val = iterator.next()
print(val)
结语
在本文中,我们详细介绍了如何使用Python构建二叉搜索树迭代器。我们提供了易于理解的代码示例,并提供了详细的解释,以便您能够轻松地理解和实现该迭代器。希望本文对您有所帮助,如果您有任何问题或建议,欢迎随时提出。