首页 > 其他分享 >leetcode -- Kth Smallest Element in a BST -- 简单重点

leetcode -- Kth Smallest Element in a BST -- 简单重点

时间:2023-06-29 10:00:44浏览次数:48  
标签:right return -- self Element BST root stack left


https://leetcode.com/problems/kth-smallest-element-in-a-bst/

这里注意 BST的left subtree 所有**node都要小于root, right subtree 所有node都要大于**root。没有等于,并且是所有node

思路1 非递归用stack

用inorder的模板就行

class Solution(object):
    def inorder(self, root, res, k):
        stack = []

        while stack or root:
            if root:
                stack.append(root)
                root = root.left
            else:
                root = stack.pop()
                res.append(root)
                if len(res) == k:
                    return root.val
                root = root.right
    def kthSmallest(self, root, k):
        """
        :type root: TreeNode
        :type k: int
        :rtype: int
        """
        return self.inorder(root, [], k)

思路2 递归

计算一个树的node个数,
参考http://www.rainatian.com/2015/07/06/leetcode-python-java-kth-smallest-element-in-a-bst/

class Solution(object):

    def SizeOfTree(self, root):
        if root is None:
            return 0
        return self.SizeOfTree(root.left) + self.SizeOfTree(root.right) + 1

    def kthSmallest(self, root, k):
        if root is None:
            return 0

        leftsize = self.SizeOfTree(root.left)
        if leftsize == k-1:
            return root.val
        elif leftsize > k-1:
            return self.kthSmallest(root.left,k)
        else:
            return self.kthSmallest(root.right,(k-1-leftsize))

这个效率还没有非递归高,

思路3 O(BST的高度)

第二遍的时候再看

参考
http://bookshadow.com/weblog/2015/07/02/leetcode-kth-smallest-element-bst/


标签:right,return,--,self,Element,BST,root,stack,left
From: https://blog.51cto.com/u_16172916/6579220

相关文章

  • 如何从消失的异常堆栈定位线上问题
    一、消失的异常堆栈在618保障大促稳定性过程中,消失的异常堆栈可能会给我们带来严重的麻烦,因为这些堆栈信息是我们解决线上问题的关键之一。如何快速定位问题?想必大家心中都有自己的答案,当然最简单直接的办法还是查找异常堆栈信息。然而有时异常堆栈并不完整,只有一句描述,如下:Cau......
  • 使用secureCRT进行文件传输
    第一种方式:上传文件只需在shell终端仿真器中输入命令"rz",即可从弹出的对话框中选择本地磁盘上的文件,利用Zmodem上传到服务器当前路径下。下载文件只需在shell终端仿真器中输入命令"sz文件名",即可利用Zmodem将文件下载到本地某目录下。通过"FileTransfer"可以修改......
  • 力扣---1253. 重构 2 行二进制矩阵
    给你一个 2 行 n 列的二进制数组:矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是 0 就是 1。第 0 行的元素之和为 upper。第 1 行的元素之和为 lower。第 i 列(从 0 开始编号)的元素之和为 colsum[i],colsum 是一个长度为 n 的整数数组。你需要利用 ......
  • Java学习——循环结构
    循环结构while循环do...while循环for循环在Java5中引入了一种主要用于数组的增强型for循环breakcontinue一、while循环while(布尔表达式){ //循环内容只要布尔表达式为true,循环就会一直执行下去我们大多数情况是会让循环停止下来的,我们需要一个让表达式失......
  • elecrton 自定义关闭事件
     main.jsconst{app,BrowserWindow,Menu,ipcMain}=require('electron')constmainWindow=newBrowserWindow({webPreferences:{contextIsolation:false//必须有,不然报错}})//执行关闭自定义关闭ipcMain.on('handelClose'......
  • windows上传app到构建版本的方法
    ios打包好ipa文件后,ipa文件需要上架到appstore,用户才能安装。而在appstore里,无法直接将ipa上传,需要使用工具上传,但是官方提供的工具,比如xcode等只能安装在苹果电脑上。我们这篇文章,重点将介绍如何使用windows电脑将ipa文件上传appstore的构建版本里和上架的基本流程。上架ipa......
  • 问题记录:IDEA工程卡在Updating indexes一直加载
    https://blog.csdn.net/JyuSun/article/details/126401031?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-5-126401031-blog-128690534.235%5Ev38%5Epc_relevant_sort&depth_1-utm_source=distribute.pc......
  • 明德扬FPGA核心板Xilnx开发Lattice光纤7K325T410T光纤PCIE口DDR3
                   ......
  • AD域命令相关命令
     域命令相关命令 关于域命令的东西,为方便大家,整理一份,希望给大家带来一些帮助!~查询域管理员用户:netgroup“domainadmins”/domain查询域用户:netuser/domain查询域名称:netview/domain查询域内计算机:netview/domain:XX查询域控制器:nettime/domain查询所有域......
  • CF1637H Minimize Inversions Number
    我直接??????????????????考虑一个数怎么做,就是逆序对减去一个\(i\)前面的逆序对再加上顺序对。考虑很多数怎么做,就是这个玩意的和再加上子序列种的顺序对减去逆序对,顺序对可以用逆序对表示,现在只考虑顺序对。注意到,如果\(i<j,p_i>p_j\)且\(i\)在子序列中\(j\)不在子序列中,那么把\(j\)弄......