给定一棵二叉搜索树,请找出其中第k大的节点。
示例 :
输入: root = [5,3,6,2,4,null,null,1], k = 3
5
/ \
3 6
/ \
2 4
/
1
输出: 4
思路:
二叉搜索树本身是有序的,最右边节点值最大。所以采用中序(这里是右中左)遍历的方法,从右往左,从大到小数数。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def kthLargest(self, root: TreeNode, k: int) -> int:
self.res, self.k = None, k
def dfs(node):
if not node:
return
else:
dfs(node.right)
self.k -= 1
if self.k == 0:
self.res = node.val
if self.k > 0:
dfs(node.left)
dfs(root)
return self.res