leetcode-230

102 阅读1分钟

题目描述: 具体描述见原题。简单来说就是求二叉搜索树中第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问题。