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

题目

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

示例 1:

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

来源:力扣(LeetCode)leetcode-cn.com/problems/er…

解题思路

  1. 二叉搜索树的中序遍历是一个有序升序数列
  2. 先遍历右子树再遍历左子树就是一个降序数列
  3. 用k计数,每遍历一个节点减1,k等于1时就是第k大的节点,譬如第1大的就是第1个节点

代码实现

var kthLargest = function(root, k) {
    if (root === null) return
    let ans = 0
    
    //二叉搜索树的中序遍历是一个有序升序数列
    //先遍历右子树再遍历左子树就是一个降序数列
    //用k计数,每遍历一个节点减1,k等于0时就是第k大的节点
    function dfs(root) {
        if (!root) return
        dfs(root.right)
        if (k-- === 1) {
            ans = root.val
            return
        }
        dfs(root.left)
    }
    dfs(root)

    return ans
};
复制代码

如有错误欢迎指出,欢迎一起讨论!

猜你喜欢

转载自juejin.im/post/7040419615566266398
今日推荐