返回
Python LeetCode 230:二叉搜索树中第 K 小的元素
后端
2023-12-16 00:00:20
问题
给定一个二叉搜索树(BST)的根节点 root 和一个整数 k,返回该二叉搜索树中第 k 小的元素。
解法一:递归
我们采用递归的方式来解决这个问题。我们首先在左子树中查找第 k 小的元素,如果找到则直接返回。否则,我们在右子树中查找第 k - (左子树节点数)小的元素,找到则直接返回。否则,我们就返回根节点的值。
def kthSmallest(root, k):
def inorder(node):
if not node:
return
inorder(node.left)
self.count += 1
if self.count == k:
self.res = node.val
return
inorder(node.right)
self.count = 0
self.res = None
inorder(root)
return self.res
解法二:基于栈
我们也可以使用基于栈的方法来解决这个问题。我们首先将根节点压入栈中。然后,我们重复以下步骤,直到栈为空:
- 弹出栈顶元素 node。
- 如果 node 的左子树不为空,则将 node 的左子树的根节点压入栈中。
- 如果 node 的右子树不为空,则将 node 的右子树的根节点压入栈中。
当栈为空时,我们返回栈顶元素的值,即第 k 小的元素。
def kthSmallest(root, k):
stack = []
while root or stack:
while root:
stack.append(root)
root = root.left
root = stack.pop()
k -= 1
if k == 0:
return root.val
root = root.right
return None
示例
root = TreeNode(5)
root.left = TreeNode(3)
root.right = TreeNode(6)
root.left.left = TreeNode(2)
root.left.right = TreeNode(4)
root.right.right = TreeNode(7)
k = 3
result = kthSmallest(root, k)
print(result) # 输出:4
总结
在这篇博客文章中,我们介绍了两种方法来解决 LeetCode 230:二叉搜索树中第 K 小的元素。我们还提供了一些示例代码和测试结果,以帮助您理解如何使用这些方法。希望这篇博客文章对您有所帮助!