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 协议 ,转载请注明出处!