首页 > 其他 > 详细

leetcode-230-二叉搜索树中第k小的元素

时间:2019-10-05 16:56:13      阅读:75      评论:0      收藏:0      [点我收藏+]

题目描述:

技术分享图片

 

 技术分享图片

 

 

方法一:递归:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def kthSmallest(self, root: TreeNode, k: int) -> int:
        res = None
        def helper(root):
            nonlocal k,res
            if root.left:helper(root.left)
            k -= 1
            if k == 0:
                res = root.val
                return
            if root.right:helper(root.right)
        helper(root)
        return res
        

方法二:迭代,中序遍历

class Solution:
    def kthSmallest(self, root: TreeNode, k: int) -> int:
        cur = root
        stack = []
        while cur or stack:
            while cur:
                stack.append(cur)
                cur = cur.left
            node = stack.pop()
            k-=1
            if k == 0:
                return node.val
            if node.right:
                cur = node.right

附*生成器

class Solution:
    def mid_order(self, root):
        if not root: return
        yield from self.mid_order(root.left)
        yield root.val
        yield from self.mid_order(root.right)
        
    def kthSmallest(self, root: TreeNode, k: int) -> int:
        gen = self.mid_order(root)
        for _ in range(k - 1):
            next(gen)
        return next(gen)

 

leetcode-230-二叉搜索树中第k小的元素

原文:https://www.cnblogs.com/oldby/p/11624965.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!