给定一棵二叉搜索树,请找出其中第 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 ≤ 二叉搜索树元素个数
Related Topics
中序遍历(倒着)
二叉搜索树、既然顺着中序遍历是连续递增的序列,先遍历右子树、然后跟节点、最后左子树这样的顺序来遍历的话,就是一个连续递减的序列了。
再找第K大的也就轻而易举了。
代码
class Solution {
int theK;
int theNum = -1;
public int kthLargest(TreeNode root, int k) {
theK = k;
dfs(root);
return theNum;
}
public void dfs(TreeNode node){
if (null == node){
return;
}
dfs(node.right);
if (theK==0){
return;
}
theK--;
if (theK==0){
theNum = node.val;
return;
}
dfs(node.left);
}
}
发表评论