剑指 Offer 54. 二叉搜索树的第k大节点
剑指 Offer 54. 二叉搜索树的第k大节点
题目描述
给定一棵二叉搜索树,请找出其中第k大的节点。
示例 1:
1 | 输入: root = [3,1,4,null,2], k = 1 |
示例 2:
1 | 输入: root = [5,3,6,2,4,null,null,1], k = 3 |
限制:
1 ≤ k ≤ 二叉搜索树元素个数
解题思路
寻找二叉搜索树中的第k大元素,可以利用二叉搜索树的性质来做。二叉搜索树的中序遍历的结果是一个递增的有序序列,我们可以用count
变量记录遍历的结点数量,然后在count==k
的时候返回当前元素的值即可。
需要注意一点的是,如果按照左中右
顺序遍历得到的是一个递增的序列,返回的是第k小的数;如果按照右中左
的顺序遍历得到的是一个递减的序列,返回的是第k大的数。
具体的实现细节见代码:
1 | int res=INT32_MIN; |
时间复杂度为:,为二叉树的结点个数
空间复杂度为:,为二叉树的结点个数
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 二进制的叮当喵!