题目描述
给定一棵二叉搜索树,请找出其中第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
解题思路: DFS+中序遍历
- 因为题目是二叉搜索树, 可以根据二叉搜索树的中序遍历是一个有序的序列来考虑.
- 因为是求最大的第K个, 所以我们可以先用" 右 根 左" 的顺序来遍历, 就是一个倒序的序列.
- 我们在进行中序遍历时, 根据K值记录中序的次数, 当K为0时, 此时遍历到的中序值就是第K大的节点
示例代码
def kthLargest(self, root: TreeNode, k: int) -> int:
def dfs(root):
if not root:
return
dfs(root.right)
if self.k == 0:
return
self.k -= 1
if self.k == 0:
self.res = root.val
dfs(root.left)
self.k = k
self.res = 0
dfs(root)
return self.res