zoukankan      html  css  js  c++  java
  • 剑指 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
  • 相关阅读:
    搭建单区域DNS服务器
    安装一个KVM服务器
    配置HTTPS网站服务器
    部署并测试动态WSGI站点
    java内置的四大函数式接口
    java自定义异常类
    java方法重写的规定
    spring跨重定向传递数据
    SpringEl表达式(转)
    Spring中的@conditional注解
  • 原文地址:https://www.cnblogs.com/yeshengCqupt/p/13572036.html
Copyright © 2011-2022 走看看