题目
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k小的元素(从 1 开始计数)。
示例 1:

输入:root = [3,1,4,null,2], k = 1
输出:1
示例 2:

输入:root = [5,3,6,2,4,null,null,1], k = 3
输出:3
提示:
- 树中的节点数为
n。 1 <= k <= n <= 1040 <= Node.val <= 104
思路
核心思路:二叉搜索树的中序遍历是升序序列
so,中序遍历一遍二叉搜索树,在遍历的过程中计数,就可以找到第k小的元素了~
中序遍历的递归模板就是:
inorder(node.left)
遍历中需要做的事~
inorder(node.right)
代码
有一个需要注意的点:self.result is not None != not self.result
前一个是严格判断是否为空,后一个是判断布尔值是否为0
python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
self.count = 0
self.result = None
def inorder(node: Optional[TreeNode]) -> None:
if not node or self.result is not None: return # 提前结束递归
inorder(node.left)
#中序遍历中需要做的操作:
self.count += 1
if self.count == k:
self.result = node.val
return
inorder(node.right)
inorder(root)
return self.result