目录

剑指 Offer 54. 二叉搜索树的第k大节点

给定一棵二叉搜索树,请找出其中第 k 大的节点的值。

示例 1:

1
2
3
4
5
6
7
输入: root = [3,1,4,null,2], k = 1
   3
  / \
 1   4
  \
   2
输出: 4
1
2
3
4
5
6
7
8
9
输入: root = [5,3,6,2,4,null,null,1], k = 3
       5
      / \
     3   6
    / \
   2   4
  /
 1
输出: 4

DFS

中序遍历倒序,即中右左,这样就能转化为求中序遍历倒序第 k 个结点值

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
func kthLargest(root *TreeNode, k int) int {
   var dfs func(root *TreeNode)
   var i, res int
   dfs = func(root *TreeNode) {
      if root == nil {
         return
      }
      dfs(root.Right)
      i++
      if i == k {
         res = root.Val
      }
      dfs(root.Left)
   }
   dfs(root)
   return res
}