📅  最后修改于: 2023-12-03 15:26:09.364000             🧑  作者: Mango
本文介绍二叉搜索树的问题8:寻找二叉搜索树中第k小的节点。
给定一个二叉搜索树(BST)的根节点root和一个整数k,找到树中第k小的节点。
一棵二叉搜索树进行中序遍历,得到的就是有序的结果。因此,我们可以先对二叉搜索树进行中序遍历,得到有序数组,然后返回第k个元素。
class Solution:
def kthSmallest(self, root: TreeNode, k: int) -> int:
def inorderTraversal(root: TreeNode) -> List[int]:
res = []
if not root:
return res
res += inorderTraversal(root.left)
res.append(root.val)
res += inorderTraversal(root.right)
return res
res = inorderTraversal(root)
return res[k-1]
二叉搜索树的中序遍历可以用迭代方式实现。具体思路是用栈以及一个计数器来模拟中序遍历的过程,当计数器达到k时即可返回当前节点的值。
class Solution:
def kthSmallest(self, root: TreeNode, k: int) -> int:
stack = []
cur = root
count = 0
while stack or cur:
while cur:
stack.append(cur)
cur = cur.left
cur = stack.pop()
count += 1
if count == k:
return cur.val
cur = cur.right
本文介绍了如何在二叉搜索树中寻找第k小的节点。常规方法是进行中序遍历,得到有序数组,返回第k个元素。另一种方法是迭代,模拟中序遍历的过程,当计数器达到k时返回当前节点的值。两种方法时间复杂度相同,但空间复杂度不同,并且迭代方法在最坏情况下空间复杂度较低。