[路飞]_二叉搜索树的第 k 大节点

143 阅读1分钟

题目介绍

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

示例1

输入: root = [3,1,4,null,2], k = 1
   3
  / \
 1   4
  \
   2
输出: 4

示例2

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

限制:

解题思路

这道题利用二叉搜索树的特性(左子树节点的值都小于根节点的值,右子树节点的值都大于根节点的值)

利用中序遍历可以形成一个从小到大排列的数组,只需要返回数组的倒数第 k 个值就是二叉搜索树第 k 大节点的值

2.gif

解题代码

var kthLargest = function(root, k) {
    let res = []
    res = inorder(root, res)
    return res[res.length - k]
};

var inorder = function(root, res) {
    if (!root) return null
    inorder(root.left, res)
    res.push(root.val)
    inorder(root.right, res)
    return res
}