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

题目描述:

 

方法一:递归:

# 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)

猜你喜欢

转载自www.cnblogs.com/oldby/p/11624965.html