zoukankan      html  css  js  c++  java
  • leetcode 二叉搜索树中第K小的元素 python

     
     
     
    二叉搜索树中第K小的元素
     
     

    给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。

    说明:
    你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。

    示例 1:

    输入: root = [3,1,4,null,2], k = 1
       3
      / 
     1   4
      
       2
    输出: 1

    示例 2:

    输入: root = [5,3,6,2,4,null,null,1], k = 3
           5
          / 
         3   6
        / 
       2   4
      /
     1
    输出: 3

    进阶:
    如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化 kthSmallest 函数?

    我的想法是广度优先遍历先构建一个列表,然后排个序

     1 # Definition for a binary tree node.
     2 # class TreeNode(object):
     3 #     def __init__(self, x):
     4 #         self.val = x
     5 #         self.left = None
     6 #         self.right = None
     7 
     8 class Solution(object):
     9     def kthSmallest(self, root, k):
    10         """
    11         :type root: TreeNode
    12         :type k: int
    13         :rtype: int
    14         """
    15         # 先广度优先遍历
    16         width = [root]
    17         val = [root.val]
    18         i = 0
    19         while i < len(width):
    20             cur = width[i]
    21             if cur.left is not None:
    22                 width.append(cur.left)
    23                 val.append(cur.left.val)
    24             if cur.right is not None:
    25                 width.append(cur.right)
    26                 val.append(cur.right.val)
    27             i += 1
    28         val.sort()
    29         
    30         return val[k-1]
    31         
    32         
    33         

    如果要频繁插入的时候,就每次插入时候用二分查找 维护这个树内元素的列表

  • 相关阅读:
    HTTP网页错误代码大全带解释
    记录一下手把手教您做电商网站
    C#中的Attribute
    C#中dynamic的正确用法
    【CSP】最大的矩形
    【CSP】字符与int
    C++数组初始化
    C++中输出字符到文本文档
    C++ 中时钟函数的使用
    各种函数的头文件
  • 原文地址:https://www.cnblogs.com/Lin-Yi/p/9704177.html
Copyright © 2011-2022 走看看