• LeetCode[剑指Offer54]二叉搜索树的第K大节点


    难度:简单

    题目:

    给定一棵二叉搜索树,请找出其中第 k 大的节点的值。

    示例 1:

    输入: root = [3,1,4,null,2], k = 1
       3
      / \
     1   4
      \
       2
    输出: 4

     示例 2:

    输入: root = [5,3,6,2,4,null,null,1], k = 3
           5
          / \
         3   6
        / \
       2   4
      /
     1
    输出: 4

    限制:

    • 1 ≤ k ≤ 二叉搜索树元素个数

    Related Topics

    • 深度优先搜索
    • 二叉搜索树
    • 二叉树

    重点!!!解题思路

    第一步:

    此题我们首先采用递归和栈的思想来解决

    根据此题例子可知,所有比根节点大的节点都在右子树,比根节点小的节点都在左子树

    如果想求第k大个节点,一定是从右子树中找起

    第二步:

    判断,当k大于右子树节点总和时,那么k肯定在左子树中

    如果k=右子树节点总和+1时,那么k是根节点

    如果k小于右子树节点总和时,那么k肯定在右子树中

    已知上述结论,此题易解

    源码:

    1. class Solution {
    2. public int kthLargest(TreeNode root, int k) {
    3. int cnt=getCount(root.right); //得到右子树的所有节点
    4. if (cnt>=k) return kthLargest(root.right,k); //以下开始递归求解
    5. if (cnt+1==k) return root.val;
    6. return kthLargest(root.left,k-cnt-1);
    7. }
    8. public int getCount(TreeNode root) {
    9. if (root==null) return 0;
    10. return 1+getCount(root.left)+getCount(root.right);
    11. }
    12. }

    运行结果:

     

    如果您还有什么疑问或解答有问题,可在下方评论,我会及时回复。 

    系列持续更新中,点个订阅吧

  • 相关阅读:
    md-editor-v3 markdown编辑器
    LeetCode 每日一题 2022/11/21-2022/11/27
    嵌入式分享合集91
    Linux开机自动挂载
    国内机器人编程赛事大全介绍
    Charles-ios无法抓包原因之一证书
    一点点树和算法
    Oracle存储过程
    一文了解企业云盘和大文件传输哪个更适合企业传输
    springSecurity简单直接说明
  • 原文地址:https://blog.csdn.net/m0_57209427/article/details/127920254