给定一棵二叉搜索树,请找出其中第k大的节点。
二叉搜索树的性质是:中序遍历递增序列。因此如果求第k大节点只需要把中序遍历反过来,先遍历右子树,再遍历左子树即可。代码如下
class Solution {
int res;
int k;
public int kthLargest(TreeNode root, int k) {
this.k = k;
find(root);
return res;
}
void find(TreeNode root){
if(root==null){return;}
find(root.right);
k--;
if(k==0){res = root.val;
return;}
find(root.left);
}
}