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

Posted 黑冰台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode-二叉搜索树的第K大节点相关的知识,希望对你有一定的参考价值。

 

非商业,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大节点的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode(剑指 Offer)- 54. 二叉搜索树的第k大节点

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

[LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点

LeetCode Java刷题笔记—剑指 Offer 54. 二叉搜索树的第k大节点

剑指Offer 54 二叉搜索树的第k大节点

剑指Offer 54 - 二叉搜索树的第K大节点