230. 二叉搜索树中第 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 <= 10^4
- 0 <= Node.val <= 10^4
进阶:如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化算法?
解题思路
二叉搜索树的中序遍历就是有序的,所以可以中序遍历完二叉搜索树,然后返回第k个元素即可。
Go代码
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func kthSmallest(root *TreeNode, k int) int {
arr := make([]int,0)
// 定义为函数变量的的原因是可以闭包获取arr,省去了arr需要作为指针参数传递的麻烦
var dfs func(root *TreeNode)
dfs = func(root *TreeNode) {
if root == nil {
return
}
dfs(root.Left)
arr = append(arr,root.Val)
dfs(root.Right)
}
dfs(root)
return arr[k-1]
}

1874

被折叠的 条评论
为什么被折叠?



