题解 | #二叉树之寻找第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; } }