题目描述

题解参考:中序遍历倒序法
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);
}
}
本文介绍了一种通过中序遍历的倒序方法,在二叉搜索树中寻找第K大元素的高效算法。该算法首先定义了一个递归函数dfs,用于遍历树的节点,并使用两个类变量count和res来跟踪遍历过程和存储结果。通过从右子树开始遍历,然后访问根节点,最后是左子树,确保了元素按递减顺序被访问,从而在遍历过程中找到第K大元素。
641

被折叠的 条评论
为什么被折叠?



