剑指 Offer54-二叉搜索树的第 k 大节点

剑指 Offer54-二叉搜索树的第 k 大节点

给定一棵二叉搜索树,请找出其中第 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

限制:

  • 1 ≤ k ≤ 二叉搜索树元素个数

来源:力扣(LeetCode)

链接:力扣

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

一解

使用“右中左”顺序遍历二叉树,利用 k 记录遍历次数(从最大到最小),若达到指定次数退出递归。


# 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:

        def rec(node):

            if not node: return

            rec(node.right)

            if self.k == 0: return

            self.k -= 1

            if self.k == 0: self.res = node.val

            rec(node.left)

        self.k = k

        rec(root)

        return self.res