1 题目描述
2 算法思路
思路:
- 二叉搜索树,中序遍历的结果是递增的
- 中序遍历---左、根、右,因此如果我们逆着中序遍历的流程进行遍历
- 每次遍历k--,当k == 0时,就是res
递归流程:
- 终止条件,当节点root == null 时返回
- 递归右子树,dfs(root.right)
- 递归“根”,完成操作
- 如果k == 0直接返回
- k--
- 如果此时k == 0,res = root.val
- 递归左子树,dfs(root.left)
3 代码
class Solution {
int res, k;
public int kthLargest(TreeNode root, int k) {
this.k = k;
dfs(root);
return res;
}
void dfs(TreeNode root){
if(root == null)
return;
dfs(root.right);
if(k == 0)
return;
if(--k == 0)
res = root.val;
dfs(root.left);
}
}
4 提交结果