java:
二叉搜索树是按照中序遍历排序,要找第k大的数,可以用反中序遍历,发现res的长度==k就中止遍历。
class Solution {
List<Integer> res = new ArrayList<>();
public int kthLargest(TreeNode root, int k) {
kthLargestCore(root, k);
return res.get(res.size() - 1);
}
public void kthLargestCore(TreeNode root, int k) {
if (root == null)
return ;
kthLargestCore(root.right, k);
if (res.size() == k)//在把这个节点值加入res之前判断res是不是已经满足条件了
return ;
res.add(root.val);
kthLargestCore(root.left, k);
return ;
}
}