题目描述: 具体描述见原题。简单来说就是求二叉搜索树中第K小元素。
解题思路:由于题目中给定二叉搜索树的限制,因此可以用中序遍历的方法,当访问到第K个节点,即为二叉搜索树中第K小节点。具体过程见代码。
具体代码:
func kthSmallest(root *TreeNode, k int) int {
res, count := 0, 0
korder(root, k, &res, &count) // 中序遍历二叉树
return res
}
func korder(root *TreeNode, k int, res, count *int) {
if root == nil {
return
}
korder(root.Left, k, res, count)
*count++ // 每访问一个根节点,增加一次计数。
if *count == k { // 当访问到第K个节点时,即为所求
*res = root.Val
return
}
korder(root.Right, k, res, count)
}
补充说明:通常情况下可以用堆的思想解决TopK问题。