
文章目录翻转二叉树一、题目描述二、递归解法1. 递归三要素2. 为什么先交换再递归3. 代码实现总结每日温度一、题目描述二、暴力解法1. 思路2. 代码实现3. 逐行解释总结翻转二叉树翻转二叉树是 LeetCode 第 226 题也是递归入门最经典的题之一。题目不难但它能把递归三要素完整跑一遍。很多人的第一道递归题就是它。本文从题意讲到代码再补一个迭代版本。代码可以直接复制到力扣提交适合刚学递归的同学。一、题目描述二、递归解法1. 递归三要素写递归先想清楚三件事缺一件都容易写错。第一件是终止条件也就是什么时候停下来。第二件是当前这一层要做什么。第三件是怎么把问题缩小交给下一层。2. 为什么先交换再递归交换和递归的先后顺序其实无所谓。先递归再交换同样能得到正确的镜像。但先交换更好理解因为换完两棵子树正好各归各位。这时候再去递归左边就顺手多了。3. 代码实现# Definition for a binary tree node.# class TreeNode:# def __init__(self, val0, leftNone, rightNone):# self.val val# self.left left# self.right rightclassSolution:definvertTree(self,root:Optional[TreeNode])-Optional[TreeNode]:# 递归终止条件ifnotroot:returnNone# 若非根节点则交换左右节点root.left,root.rightroot.right,root.left# 递归调用root.leftself.invertTree(root.left)root.rightself.invertTree(root.right)returnroot代码很短真正干活的就四行。Python 的交换是同时赋值不需要额外临时变量。递归函数返回翻转后的子树根直接接回原位置就行。总结翻转二叉树的核心就是交换加递归。记住终止条件是空节点当前层交换左右孩子。每日温度每日温度是 LeetCode 第 739 题考的是数组和栈。题目给出一串每天的温度要你算出每一天等几天才会变暖。暴力解不难写但很容易写成 O(n²)。本文先讲暴力解法再给出单调栈的优化版本。代码可以直接复制提交适合正在刷系列题的同学。一、题目描述二、暴力解法1. 思路最直接的想法就是对着每一天往后扫。找到第一个比今天更热的日子把下标差记下来。要是扫到数组末尾都没找到这一天就填 0。这里的标志位用来标记今天有没有找到答案。找到就设成 True 并跳出内层循环没找到就是 False。这个方法思路简单缺点是可能做很多无用功。2. 代码实现classSolution:defdailyTemperatures(self,temperatures:list[int])-list[int]:# 暴力法对每一天往后找第一个更高的温度answer[]foriinrange(len(temperatures)):todaytemperatures[i]# 标志位记录今天有没有找到更高的温度flagFalseforjinrange(i1,len(temperatures)):iftemperatures[j]today:answer.append(j-i)flagTruebreakifnotflag:answer.append(0)returnanswer3. 逐行解释today 保存的是第 i 天的温度后面都拿它做比较。内层循环从 i1 开始因为只需要往后看。只要后面的温度比 today 大就说明找到了。把 j 减 i 塞进结果这个差值就是需要等的天数。break 不能少不跳出会把后面更远的也扫进来。循环结束后再看标志位没找到就补一个 0。总结每日温度这题暴力解好写但要小心 O(n²)。核心是找到右边第一个更大的数然后记下下标差。