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

    科技2024-01-19  89

    题链接: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)

    Processed: 0.018, SQL: 8