LeetCode 剑指 Offer 54. 二叉搜索树的第k大节点(DFS)(JavaScript-树)

题链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof/


题描述:


解题思路:

二叉搜索树的中序遍历序列(左根右)是递增序列,所以右根左的遍历序列为递减序列,我们使用一个计数器 step 记录右根左遍历的节点个数,当 step == k 时,当前节点就是第 k 大的节点。当前节点为空或者已找到结果节点,后面的遍历也就没有意义,应直接返回。


代码实现:

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} k
 * @return {number}
 */
var kthLargest = function(root, k) {
    let step = 0;
    let res;
    dfs(root);
    function dfs(root) {
        if (step == k || root == null) {
            return 0; 
        }
        dfs(root.right);
        step++;
        if (step == k) {
            res = root.val;
        } 
        dfs(root.left);
    }
    return res;
};

时间复杂度:O(n)

空间复杂度:O(n)


版权声明:本文为ySFRaabbcc原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。