給定一棵二叉搜索樹,請找出其中第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