剑指 Offer 54. 二叉搜索树的第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
  • 解法:中序遍历+递归

二叉搜索树性质:

左子树如果存在,左叶子节点一定小于根节点,右叶子节点一定大于根节点。

解题思路:

那么如果用中序遍历此二叉搜索树,是不是可以得到一个递增的序列,但是题目要求我们找第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

 

posted @ 2020-08-27 16:08  Yelush  阅读(147)  评论(0)    收藏  举报