题目描述:
方法一:递归:
# 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)
原文:https://www.cnblogs.com/oldby/p/11624965.html