标签:开始 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