要求
给定一个二叉搜索树的根节点 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
代码详解
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:
if not root:
return 0
count,curr = 0,root
stack = [root]
while stack:
if curr.left:
stack.append(curr.left)
curr = curr.left
else:
val = stack.pop()
count += 1
if count == k:
return val.val
if val.right:
stack.append(val.right)
curr = val.right
return float("-inf")
重点题目
解题思路:
- 这是个二叉搜索树,有一个特点就是一个节点的左子树都比该节点小,的右子树都比该节点大,使用了一个栈,对数据进行存储,只要是左子树的节点就进行添加,添加不了向外吐的时候,就是最小值,吐值的同时我们看一下是不是需要将右子树的值加入到栈中,能拿到值的就是小值,所以当我们的计数达到k的时候,拿到的值就是第k个最小值。