• 剑指 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
  • 相关阅读:
    苹果 iOS 8 新固件新功能特性总结汇总 (苹果 iPhone/iPad 最新移动操作系统)
    为什么魔兽世界里男性玩家爱选女性角色?
    腾讯PK微软 王者之战一触即发
    策略模式
    代理模式
    模板模式
    适配器模式
    工厂模式
    随机森林步骤(转)
    马氏距离通俗理解(转)
  • 原文地址:https://www.cnblogs.com/yeshengCqupt/p/13572036.html
Copyright © 2020-2023  润新知