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

196 阅读1分钟

剑指 Offer 54. 二叉搜索树的第k大节点

序言

本题比较简单,二叉树深度递归即可得到结果。如您已经算法入门,不必观看本文;本文仅供记录作者学习算法过程。

题目

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

示例1

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

题解

已知:二叉树为二叉搜索树;给这个条件有什么用呢?二叉搜索树中序遍历是递增的;

搜索二叉树定义:根节点左侧元素全部小于根节点自身;根节点右侧元素全部大于根节点;

DFS遍历二叉树返回倒数第K个元素即可

或者数组中只保存k个元素,返回第一个元素即可

var kthLargest = function(root, k) {
    let list = [];
    helper(root,k)
    return list[0]
    function helper(node){
        if(list.length > k) list.shift()
        if(node === null) return 0
        helper(node.left)
        list.push(node.val)
        helper(node.right)
    }

};