码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode-二叉搜索树的第K大节点

时间:2020-12-07 12:37:30      阅读:6      评论:0      收藏:0      [点我收藏+]

标签:开始   node   变量   示例   构建   商业   ems   输出   span   

 

非商业,LeetCode链接附上:

https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof/

进入正题。

 

题目:

给定一棵二叉搜索树,请找出其中第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 ≤ 二叉搜索树元素个数

 

代码实现:

class Solution {

    int count = 0;
    int res = -1;
    public int kthLargest(TreeNode root, int k) {

        count = k;
        kthLargest(root);
        return res;
    }

    public void kthLargest(TreeNode root) {

        if(root == null) {
            return;
        }
        kthLargest(root.right);  //“递”到二叉树的最右面节点,当root.right==null时,开始“归”
        if(count == 0) return;  //此时已经找到节点,返回
        if(--count == 0) res = root.val;  //得到对应的第K大的值,每向上“归”一次,count减1
        kthLargest(root.left);  //根据二叉搜索树的性质,下一个节点在当前节点对应二叉树的最右面节点
    }
}
//时间复杂度O(n),空间复杂度O(n)

 

分析:

由于是求第K大,因此转化中序遍历为“右-中-左”,并在找到值之后返回;

递归方法,要在大脑里构建一套递归的体系,如何“递”、怎么“归”;

在本题中,使用全局变量,不受递归的影响,更好理解和解决问题。

 

--End

 

LeetCode-二叉搜索树的第K大节点

标签:开始   node   变量   示例   构建   商业   ems   输出   span   

原文地址:https://www.cnblogs.com/heibingtai/p/14074452.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!