题目描述
题解参考:中序遍历倒序法
Java
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
// 中序遍历的倒序即为节点值的递减序列
class Solution {
int res=0, count=0; //形参 k不能随着 dfs的迭代而不断变化,为了记录迭代过程和结果,引入类变量 count记录k的变化 和 res记录返回结果。
public int kthLargest(TreeNode root, int k) {
count = k; // 利用形参值k对类变量count进行初始化
dfs(root); // 这里不要传入形参k,dfs中直接使用的是初始值为k的类变量count
return res;
}
// 中序遍历的倒序(右子树-根节点-左子树)
public void dfs(TreeNode root) {
if(root == null || count == 0) return; //当 root为空或者已经找到了第 k大元素(count减为0)时,直接返回
dfs(root.right);
if(--count == 0) { // 先对count执行-1,再判断
res = root.val;
return; // 找到 res后,提前 return可以避免之后的无效迭代dfs(root.left);
}
dfs(root.left);
}
}