- 题目描述
给定一棵二叉搜索树,请找出其中第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
- 解法:中序遍历+递归
二叉搜索树性质:
左子树如果存在,左叶子节点一定小于根节点,右叶子节点一定大于根节点。
解题思路:
那么如果用中序遍历此二叉搜索树,是不是可以得到一个递增的序列,但是题目要求我们找第k大的数,那么我们将中序遍历的方式改一改,先遍历右子树,再遍历根节点,最后遍历左子树,是不是就是一个递减的序列,然后当遍历到第k个节点的时候,直接返回即可。(这里需要注意一下Python的self变量的定义)
class Solution: def kthLargest(self, root: TreeNode, k: int) -> int: def inorder(root): if root.right: inorder(root.right) if self.k == 0: return self.k -= 1 if self.k == 0: self.res = root.val return self.res if root.left: inorder(root.left) self.k = k inorder(root) return self.res