/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
// 二叉搜索树的中序遍历变种(右中左,是依次递减的序列)
int ans;
// 必须把这个设置为全局的,不能当做df参数往下传,要不然每个栈上的k值都会回滚。
int clock;
public int kthLargest(TreeNode root, int k) {
clock=k;
dfs(root);
return ans;
}
public void dfs(TreeNode node){
if(node==null){
return;
}
dfs(node.right);
// 优化,后面不用判断了
if(clock==0){
return;
}
--clock;
if(clock==0){
ans=node.val;
return;
}
dfs(node.left);
}
}