[路飞]_leetcode_剑指 Offer 54. 二叉搜索树的第k大节点

68 阅读1分钟

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

解题思路

二叉搜索树的性质是左子树的值都要小于根节点,右子树的值都要大于根节点 所以二叉搜索树的中序遍历是一个有序序列(单调递增序列)

因为二叉搜索的中序遍历是一个单调递增序列,那么根据题意,我们需要获取 第 k 大的节点, 那么我们可以反向中序遍历,让序列变成一个单调递减的序列

代码

var kthLargest = function(root, k) {
    let target = 0;
    var dfs = function(root) {
        if (!root) return
        dfs(root.right)
        if (!--k) target = root.val
        dfs(root.left)
    }
    dfs(root)
    return target
};