题目
给定一棵二叉搜索树,请找出其中第 k 大的节点的值。
代码实现
中序遍历变形
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int k;
public int kthLargest(TreeNode root, int k) {
this.k = k;
return dfs(root);
}
public int dfs(TreeNode node){
if (node == null || k == 0){
return 0;
}
//从右边开始找
int right = dfs(node.right);
//当k等于1时,即此时节点为答案
if(k == 1){
k--;
return node.val;
}
else {
k--;
}
int left = dfs(node.left);
return left + right;
}
}
中序遍历简洁版
K神代码
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);
}
}