leetcode_230 二叉搜索树中第K小的元素

102 阅读1分钟

要求

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

示例 1:

image.png

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

示例 2:

image.png

输入: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")

image.png

重点题目

解题思路:

  • 这是个二叉搜索树,有一个特点就是一个节点的左子树都比该节点小,的右子树都比该节点大,使用了一个栈,对数据进行存储,只要是左子树的节点就进行添加,添加不了向外吐的时候,就是最小值,吐值的同时我们看一下是不是需要将右子树的值加入到栈中,能拿到值的就是小值,所以当我们的计数达到k的时候,拿到的值就是第k个最小值。