题解 | #第k轻的牛牛#

第k轻的牛牛

https://www.nowcoder.com/practice/d3b31f055b1640d9b10de0a6f2b8e6f3

知识点

树,中序遍历

解题思路

根据二叉搜索树的性质,当前节点的排名与其位置有关,

如果是左叶子节点等于前置排名+1,如果是中间节点等于前置排名+左子树节点数量+1,如果是右叶子节点等于父节点排名+1。

因此我们要使用中序遍历。

例如这棵树,初始前置排名0,根节点9,左子树不为空找到5,左子树不为空找到4,4的前置排名为0,所以4的排名为1,5的排名等于前置排名0+左子树数1+1=2,5的右子树不为空,找到7,7的左子树不为空,6的排名为前置排名2+1=3,依次类推。

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<>();
    public int kthLighest (TreeNode root, int k) {
        // write code here
        getOrder(root,0);
        return map.get(k);
    }

    /**
    * preNum:前置节点的排名
     */
    public int getOrder(TreeNode root, int preNum){
        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;
    }
}

全部评论

相关推荐

08-07 11:47
门头沟学院 Java
快手你的进度好快啊,可是我感觉我还没做好准备8.4投递8.7hr初筛-用人部门筛选
瞒着老板找实习:2号投敌 4号约面 今天一面已挂 哈哈
投递快手等公司10个岗位
点赞 评论 收藏
分享
08-07 11:58
门头沟学院 Java
投实习的时候大厂只有你给面现在攻守易型了是吧挂的这么果断,连面都不给...
迷茫的大四🐶:实习是实习,正职是正职,两码事,实习也就几个月,卡的少,正职可就得狠狠地卡了
点赞 评论 收藏
分享
头像
08-05 15:59
已编辑
乐山师范学院 运维工程师
点赞 评论 收藏
分享
牛客64188140...:选择转行的话,建议做销售类的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
08-09 12:00
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务