给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k小的元素(k 从 1 开始计数)。
示例 1:
复制代码
输入:root = [3,1,4,null,2], k = 1
输出:1
方法一:中序遍历获取排序结果,然后取第k的数字即可。
python复制代码
class Solution:
def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
res = []
def inorder(node):
if not node:
return
inorder(node.left)
res.append(node.val)
inorder(node.right)
inorder(root)
return res[k-1]
方法二:循环找到最左节点,然后一个个遍历找到第K的值。
python复制代码
class Solution:
def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
stack = []
cur = root
while cur or stack:
while cur:
stack.append(cur)
cur = cur.left
cur = stack.pop()
k -= 1
if k == 0:
return cur.val
cur = cur.right
return 0