python刷题记录

66 阅读2分钟

目标:根据我的经验,刷题可以迅速提升某语言的编程技巧,同时熟悉常见语法.

prompt: 代码 + 简单说下以上代码涉及的python语法知识点。可以出哪些面试题。

2025-02-20

104. 二叉树的最大深度

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def maxDepth(self, root: Optional[TreeNode]) -> int:
        if root is None:
            return 0
        return max(self.maxDepth(root.left),self.maxDepth(root.right))+1

105. 从前序与中序遍历序列构造二叉树

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
        if not preorder:  # 空节点
            return None
        left_size = inorder.index(preorder[0])  # 左子树的大小 // 元素无重复
        # preorder根-左-右 # inorder 左-根-右
        left = self.buildTree(preorder[1: 1 + left_size], inorder[:left_size])
        right = self.buildTree(preorder[1 + left_size:], inorder[1 + left_size:])
        return TreeNode(preorder[0], left, right) # 根-左-右 参考__init__构建树
  • 列表的index(value)和切片截取方法.和go切片截取语义一致。都是左闭右开.

    • list[start:end] 表示从索引 start 开始到索引 end 结束(不包含 end)的子列表
    • list[start:] 表示从索引 start 开始到列表末尾的子列表。
    • list[:end] 表示从列表开头到索引 end 结束(不包含 end)的子列表。
    • 代码中列表切片被用于分割前序和中序遍历结果,分别得到左子树和右子树的遍历序列,以便递归构建子树。
  • 理解None

# Python 中使用 None

x = None  # 将变量 x 赋值为 None,表示 x 当前没有值

if x is None:
    print("x 是 None")  # 输出:x 是 None

if not x:  # None 在布尔上下文中为 False
    print("x 在布尔上下文中为 False") # 输出:x 在布尔上下文中为 False

def my_function():
    pass  # 函数没有显式返回值

result = my_function()
print(result is None) # 输出:True,函数默认返回 None