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

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

题目描述:

给定一个二叉搜索树的根节点 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 <= 104
0 <= Node.val <= 104

进阶:如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化算法?

思路:

时间复杂度:O(n),空间复杂度O()

中序遍历

代码:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func kthSmallest(root *TreeNode, k int) int {
    var dfs func(root *TreeNode)
    var res int
    dfs = func(root *TreeNode){
        if root == nil{
            return
        }
        dfs(root.Left)
        k--
        if k==0{
            res = root.Val
            return 
        }
        dfs(root.Right)
    }
    
    dfs(root)
    return res
}

代码效率:

执行用时:8 ms, 在所有 Go 提交中击败了78.81%的用户
内存消耗:6.1 MB, 在所有 Go 提交中击败了97.63%的用户


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!