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

87 阅读1分钟

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

问题描述: 给定一棵二叉搜索树,请找出其中第 k 大的节点的值。(by leetcode 54)

示例 1:

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

思路: 首先明确二叉搜索树的特别,所有右子树节点的值>根节点>左子树(每个树杈都是这个特点) 1.获取右子树的节点数r_length,然后比较r_length与k的大小,确定节点在哪棵树上。 2.如果在左子树,那么要算出找左子树第几大节点。

/**
 * 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}
 */
 function getCount(root){
     if(root==null)return 0;
     return getCount(root.left)+getCount(root.right)+1

 }
var kthLargest = function(root, k) {
    if(root==null)return null;
    let r_length=getCount(root.right);
    if(k<=r_length)return kthLargest(root.right,k)
    if(k==r_length+1)return root.val;
    return kthLargest(root.left,k-r_length-1)
};