标签:开始 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
标签:开始 node 变量 示例 构建 商业 ems 输出 span
原文地址:https://www.cnblogs.com/heibingtai/p/14074452.html