题解 | #第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;
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 12:19
点赞 评论 收藏
分享
美丽的查理斯不讲武德:包kpi的啊,感觉虾皮一点hc都没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务