剑指 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)
};