题解 | #二叉树之寻找第k大#
二叉树之寻找第k大
https://www.nowcoder.com/practice/8e5f73fa3f1a407eb7d0b0d7a105805e
知识点
树,中序遍历
解题思路
这题需要我们寻找第k大的,还是使用寻找第k小的方法,我们稍加修改,第k大不久等于总数-第k小+1,只要再找到总数就行了。
Java代码
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @param k int整型
* @return int整型
*/
Map<Integer,Integer> map = new HashMap<>(); //key:排名 val:节点值
int sum = 0; //节点总数
public int kthLargest (TreeNode root, int k) {
// write code here
getOrder(root,0);
return map.get(sum - k + 1); //总数-第k小 + 1=第k大。
}
/**
* @param preNum 前置排名
*/
public int getOrder(TreeNode root, int preNum){
sum++;
int num = 1; //节点数量
if(root.left != null){
num += getOrder(root.left,preNum);
}
map.put(num + preNum,root.val);
if(root.right != null){
num += getOrder(root.right,preNum + num);
}
return num;
}
}