题目描述
给定一棵二叉搜索树,请找出其中第k大的节点。
示例 1:
输入: root = [3,1,4,null,2], k = 1
3
/ \
1 4
\
2
输出: 4
示例 2:
输入: root = [5,3,6,2,4,null,null,1], k = 3
5
/ \
3 6
/ \
2 4
/
1
输出: 4
限制:
1 ≤ k ≤ 二叉搜索树元素个数
解题之前,首先了解一下二叉搜索树的性质:
左子树的节点值都小于等于根节点值,右子树的节点值都大于等于根节点值
根据二叉搜索树的性质,如果以右根左的顺序遍历二叉搜索树,则节点值顺序刚好是从大到小的,找到第 k 个节点,返回节点值即可
动画演示如下:
代码如下
var kthLargest = function(root, k) {
if(!root) return null;
// 初始化
let target = 0;
var nodeV = function(root){
if(!root) return null;
nodeV(root.right);
if(!--k) return target = root.val;
nodeV(root.left)
};
nodeV(root);
return target;
};
至此我们就完成了剑指 Offer 54-二叉搜索树的第k大节点这道题
欢迎小伙伴建议讨论