题目:
给定一棵二叉搜索树,请找出其中第k大的节点。
例子:
代码1:(递归法)
class Solution {
int k,val;
public int kthLargest(TreeNode root, int k) {
this.k = k;
fun(root);
return val;
}
public void fun(TreeNode root){
if (root==null) return;
fun(root.getRight());
//做减法,如果k==0,就返回了
if (--k==0){
this.val=root.getVal();
return;
}
fun(root.getLeft());
}
}
代码1解析:
本质上是一个中序遍历,但是有一点,给的kthLargest()方法需要返回一个int型的数,而中序遍历是碰到null返回的,无法兼容,所以需要调用另外一个方法,而这个方法是没有返回值的,所以就需要用到类里边的变量,所以我们再类里边定义了两个变量,其实k是可以不用定义在类里边,可以当作参数传递。