
剑指Offer-python
文章平均质量分 65
华尔街的幻觉
不积跬步 无以至千里
展开
-
(python版)《剑指Offer》JZ29:最小的 k 个数
[牛客][Leetcode]【题目描述】输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。原创 2021-05-14 11:09:54 · 343 阅读 · 3 评论 -
(python版)《剑指Offer》JZ19:顺时针打印矩阵
[牛客][Leetcode]【题目描述】输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。【解题思路】根据题目示例 matrix = [[1,2,3],[4,5,6],[7,8,9]] 的对应输出 [1,2,3,6,9,8,7,4,5]。可以发现,顺时针打印矩阵的顺序是 “从左向右、从上向下、从右向左、从下向上” 循环。因此,考虑设定矩阵的 “左、上、右、下” 四个边界,模拟以上矩阵遍历顺序。像个“回”字【算法流程】空值处理: 当 matrix 为空时,直接返回原创 2021-05-11 17:07:09 · 304 阅读 · 1 评论 -
(python版)《剑指Offer》JZ12:数值的整数次方
[牛客][Leetcode]实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。【解题思路】求 xn,最简单的方法是通过循环将 n 个 x 乘起来,依次求 x1, x2, …, xn-1, xn,时间复杂度为 O(n)。快速幂法 可将时间复杂度降低至 O(log2n),以下从 “二分法” 和 “二进制” 两个角度解析快速幂法。转化为位运算:向下整除 n//2 等价于 右移一位 n>>1 ;取余数 n%2 等原创 2021-05-11 13:53:37 · 236 阅读 · 0 评论 -
(python版)《剑指Offer》JZ11:二进制中1的个数
[牛客][Leetcode]【题目描述】请实现一个函数,输入一个整数(以二进制串形式),输出 该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。【解题思路】根据 与运算 定义,设二进制数字 n ,则有:若 n&1=0 ,则 n 二进制 最右一位 为 0 ;若 n&1=1 ,则 n 二进制 最右一位 为 1 。根据以上特点,考虑以下 循环判断 :判断 n 最右一位是否为 1 ,根据结果原创 2021-04-25 18:12:05 · 196 阅读 · 0 评论 -
(python版)《剑指Offer》JZ66:机器人的运动范围
牛客Leetcode【题目描述】地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?【解题思路】本题与 矩阵中的路径 类似,是典型的原创 2021-04-22 16:10:27 · 352 阅读 · 0 评论 -
(python版)《剑指Offer》JZ65:矩阵中的路径
牛客Leetcode【题目描述】给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻 或 垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。解题思路:本问题是典型的矩阵搜索问题,可使用 深度优先搜索(DFS)+ 剪枝 解决原创 2021-04-22 00:50:25 · 301 阅读 · 0 评论 -
(python版)《剑指Offer》JZ10:矩形覆盖
牛客题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:示例:输入:4 ==> 返回:5输入:5 ==> 返回:8【解题思路】我们先把2x5的覆盖方法记为f(5)。用第一个1x2小矩阵覆盖大矩形的最左边时有两个选择,竖着放或者横着放。当竖着放的时候,右边还剩下2x4的区域,这种情况下的覆盖方法记为f(4)。接下来考虑横着放的情况。当1x2的小矩形横着原创 2021-04-20 16:08:09 · 184 阅读 · 0 评论 -
(python版)《剑指Offer》JZ28:青蛙跳台阶
【解题思路】此类求 多少种可能性 的题目一般都有 递推性质 ,即 f(n) 和 f(n-1)…f(1) 之间是有联系的。设跳上 n 级台阶有 f(n) 种跳法。在所有跳法中,青蛙的最后一步只有两种情况: 跳上 1 级或 2 级台阶。当为 1 级台阶: 剩 n-1 个台阶,此情况共有 f(n-1) 种跳法;当为 2 级台阶: 剩 n-2 个台阶,此情况共有 f(n-2) 种跳法。f(n) 为以上两种情况之和,即 f(n)=f(n-1)+f(n-2) ,以上递推性质为斐波那契数列。本题可原创 2021-04-20 11:29:46 · 288 阅读 · 0 评论 -
(python版)《剑指Offer》JZ27:斐波那契数列
牛客Leetcode【题目描述】写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。注:答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。【思路1】斐波那契数列的定义是 f(n原创 2021-04-20 10:59:41 · 225 阅读 · 0 评论 -
(python版)《剑指Offer》JZ21:栈的压入、弹出序列
牛客Leetcode题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。【解题思路】如下图所示,给定一个 压入序列 pushed 和 弹出序列 popped ,则压入 / 弹出操作的顺序(即排列)是 唯一确定 的。如下图所示,栈的数据操作具有 先入原创 2021-04-19 21:58:35 · 212 阅读 · 0 评论 -
(python版)《剑指Offer》JZ20:包含min函数的栈
牛客Leetcode【解题思路】普通栈的 push() 和 pop() 函数的复杂度为 O(1) ;而获取栈最小值 min() 函数需要遍历整个栈,复杂度为 O(N) 。【本题难点】 将 min() 函数复杂度降为 O(1) ,可通过建立辅助栈实现;数据栈 A : 栈 A 用于存储所有元素,保证入栈 push() 函数、出栈 pop() 函数、获取栈顶 top() 函数的正常逻辑。辅助栈 B : 栈 B 中存储栈 A 中所有 非严格降序 的元素,则栈 A 中的最小元素始终对应栈 B 的栈顶元原创 2021-04-19 17:05:33 · 190 阅读 · 0 评论 -
(python版)《剑指Offer》JZ5:用两个栈实现队列
牛客Leetcode用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成 在队列尾部插入整数 和 在队列头部删除整数 的功能。(若队列中没有元素,deleteHead 操作返回 -1 )【解题思路】两个栈,一个只负责入(栈顶为队列的尾),一个只负责出(栈顶为队列的首)加入队尾 appendTail()函数: 将数字 val 加入栈 A 即可。删除队首deleteHead()函数: 有以下三种情况。当栈 B 不为空: B中原创 2021-04-16 23:49:38 · 183 阅读 · 0 评论 -
(python版)《剑指Offer》JZ53:表示数值的字符串
牛客Leetcode【解题思路】本题使用有限状态自动机。根据字符类型和合法数值的特点,先定义状态,再画出状态转移图,最后编写代码即可。字符类型:空格 「 」、数字「 0—9 」 、正负号 「 + - 」 、小数点 「 … 」 、幂符号 「 eE 」 。状态定义:首先我们得知道什么样的字符串是数值假设字符串为A.BeC或A.BEC, 也就是整数部分为A,小数部分为B,指数部分为C,按顺序判断是否包含这三部分。按照字符串从左到右的顺序,定义以下 9 种状态。0. 开始的空格1. 幂符号原创 2021-04-15 18:42:16 · 329 阅读 · 1 评论 -
(python版)《剑指Offer》JZ52:正则表达式匹配
牛客Leetcode【解题思路】9、10的为Falseclass Solution: def isMatch(self, s: str, p: str) -> bool: m, n = len(s) + 1, len(p) + 1 dp = [[False] * n for _ in range(m)] dp[0][0] = True # 初始化首行 for j原创 2021-04-14 00:10:31 · 221 阅读 · 0 评论 -
(python版)《剑指Offer》JZ49:把字符串转换成整数
牛客Leetcode题目写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。.当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;是数字时,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。.原创 2021-04-13 22:08:17 · 215 阅读 · 1 评论 -
(python版)《剑指Offer》JZ44:翻转单词顺序列
牛客LeetCode输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。【思路1】先不看for循环,就只有 分割字符串split 和 return的(倒序)拼接字符串for循环的工作是:把原字符串s的多余空格去掉,只保留 有字符的 在一个列表s_nospace中注:split分割字符串 返回值是一个列表class Solution: de原创 2021-04-13 11:03:54 · 168 阅读 · 0 评论 -
(python版)《剑指Offer》JZ43:左旋转字符串
牛客Leetcode【思路1】切片class Solution1: def reverseLeftWords(self, s, n): return s[n:] + s[:n]时间复杂度 O(N) : 其中 N 为字符串 s 的长度,字符串切片函数为线性时间复杂度空间复杂度 O(N): 两个字符串切片的总长度为 N 。【思路2】列表遍历拼接class Solution: def reverseLeftWords(self, s, n):原创 2020-12-26 18:40:00 · 164 阅读 · 0 评论 -
(python版)《剑指Offer》JZ34:第一个只出现一次的字符
牛客Leetcode【思路1】哈希表初始化: 字典 (Python),记为 dic ;字符统计: 遍历字符串 s 中的每个字符 c ;若 dic 中 不包含 键(key) c :则向 dic 中添加键值对 (c, True) ,代表字符 c 的数量为 1 ;若 dic 中 包含 键(key) c :则修改键 c 的键值对为 (c, False) ,代表字符 c 的数量 > 1 。查找数量为 1 的字符:遍历字符串 s 中的每个字符 c ;若 dic中键 c 对应的值为 Tr原创 2020-12-26 16:49:39 · 244 阅读 · 1 评论 -
(python版)《剑指Offer》JZ27:字符串的排列
牛客Leetcode【思路1】回溯法class Solution: def permutation(self, s: str) -> List[str]: c, res = list(s), [] def dfs(x): if x == len(c) - 1: res.append(''.join(c)) # 添加排列方案 return dic原创 2020-12-26 14:23:57 · 248 阅读 · 0 评论 -
(python版)《剑指Offer》JZ02:替换空格
牛客Leetcode【思路1】replace函数class Solution: def replaceSpace(self, s: str) -> str: return s.replace(' ','%20')【思路2】遍历添加算法流程:初始化一个 list (Python) / StringBuilder (Java) ,记为 res ;遍历列表 s 中的每个字符 c :当 c 为空格时:向 res 后添加字符串 “%20” ;当 c 不为空格时原创 2020-12-23 19:12:41 · 130 阅读 · 0 评论 -
(python版)《剑指Offer》JZ51:构建乘积数组
牛客Leetcode【思路】对称遍历根据表格的主对角线(全为 1 ),可将表格分为 上三角 和 下三角 两部分。分别迭代计算下三角和上三角两部分的乘积算法流程:初始化:数组 B ,其中 B[0] = 1 ;辅助变量 tmp = 1 ;计算 B[i] 的 下三角 各元素的乘积,直接乘入 B[i];计算 B[i] 的 上三角 各元素的乘积,记为 tmp ,并乘入 B[i] ;返回 B 。a=[1,2,3,4,5]b[0]=1 tmp=1i=0b[1]=b[0]*a[0]=1*1原创 2020-12-23 17:11:26 · 165 阅读 · 0 评论 -
(python版)《剑指Offer》JZ50:数组中重复的数字
牛客Leetcode【思路1】哈希表class Solution: def findRepeatNumber(self, nums: List[int]) -> int: dic = collections.Counter(nums) for num in nums: if dic[num] > 1: return num return False时间复杂度O(n),空间原创 2020-12-23 15:58:47 · 193 阅读 · 0 评论 -
(python版)《剑指Offer》JZ40:数组中只出现一次的数字
牛客Leetcode#【只出现一次的数系列】位运算作者:fe-lucifer链接:https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/solution/zhi-chu-xian-yi-ci-de-shu-xi-lie-wei-yun-suan-by-a/来源:力扣(LeetCode)本题和主站 260 是一样的. 除了这个,主站还有 136 和 137,645。 总共加起来本系列一共 四道原创 2020-12-20 20:36:49 · 538 阅读 · 0 评论 -
(python版)《剑指Offer》JZ32:把数组排成最小的数
牛客Leetcode本质上是一个排序问题【思路1】快速排序排序判断规则: 设 nums 任意两数字的字符串格式 a 和 b ,则若ab > ba 则 a “大于” b,<b在前 a在后>若ab < ba 则 a “小于” b,<a在前 b在后>若ab = ba 则 a “等于” b.快排代码参考class Solution: def minNumber(self, nums: List[int]) -> str:原创 2020-12-16 20:51:28 · 270 阅读 · 0 评论 -
(python版)《剑指Offer》JZ30:连续子数组的最大和
牛客Leetcode【思路1】动态规划class Solution: def maxSubArray(self, nums: List[int]) -> int: for i in range(1, len(nums)): # nums[i]直接作和 nums[i] += max(nums[i - 1], 0) return max(nums)'''作者:jyd链接:https://leetcode原创 2020-12-15 17:34:39 · 240 阅读 · 0 评论 -
(python版)《剑指Offer》JZ28:数组中出现次数超过一半的数字
牛客Leetcode【思路1】排序,取中间元素时间复杂度为O(nlogn)class Solution: def majorityElement(self, nums: List[int]) -> int: if not nums: return None nums.sort() return nums[int(len(nums)/2)]'''作者:xiao-xue-66链接:https://leetcod原创 2020-12-14 20:07:53 · 261 阅读 · 0 评论 -
(python版)《剑指Offer》JZ13:调整数组顺序使奇数位于偶数前面
牛客Leetcode【思路1】双指针 i , j 分别指向数组左右两端,循环找奇偶数算法流程:初始化: i , j 双指针,分别指向数组 nums 左右两端;循环交换: 当 i = j 时跳出;指针 i 遇到奇数,则执行 i = i + 1 跳过,直到找到偶数;指针 j 遇到偶数,则执行 j = j - 1 跳过,直到找到奇数;交换 nums[i] 和 nums[j] 值;这里一定可以交换,如果没有,那就 i = j 退出循环了返回值: 返回已修改的 nums 数组 (奇前 偶后原创 2020-12-14 16:56:57 · 248 阅读 · 0 评论 -
(python版)《剑指Offer》JZ06:旋转数组的最小数字
牛客LeetCode【思路1】本质就是求解数组最小值class Solution: def minArray(self, numbers: List[int]) -> int: return min(numbers)【思路2】二分法由于原始数组是递增,那么旋转之后,旋转点左右的两部分仍然是递增的这里记原始数组中旋转点左侧的数组为 A,原始数组中旋转点右侧的数组为 B旋转之后有原来的 AB 变成了 BA算法流程:初始化: 声明 l, r双指针分别指向 n原创 2020-12-14 15:44:56 · 195 阅读 · 0 评论 -
(python版)《剑指Offer》JZ01:二维数组中的查找
牛客Leetcode这道题的关键在于:利用矩阵 “从上到下递增、从左到右递增” 的特点,建模为 二叉搜索树的查找 问题【思路】将矩阵 转化为 二叉搜索树利用矩阵 “从上到下递增、从左到右递增” 的特点,将矩阵逆时针旋转 45° ,并将其转化为图形式,发现其类似于 二叉搜索树 ,即对于每个元素,其左分支元素更小、右分支元素更大。因此,通过从 “根节点” 开始搜索,遇到比 target 大的元素就向左,反之向右,即可找到目标值 target 。“根节点” 对应的是矩阵的 “左下角”原创 2020-12-10 11:56:43 · 205 阅读 · 0 评论 -
(python版)《剑指Offer》JZ61:序列化二叉树【超详解,附手写图解】
法1:层次遍历(BFS)广度优先遍历法2:先序遍历(递归)附漂亮的手写图解原创 2020-12-09 15:40:53 · 225 阅读 · 0 评论 -
(python版)《剑指Offer》JZ59:按之字形顺序打印二叉树(又名:从上到下打印二叉树 III)【附手写图解】
Leetcode[从上到下打印二叉树 III]即牛客[按之字形顺序打印二叉树]配合(python版)《剑指Offer》JZ22:从上往下打印二叉树(python版)《剑指Offer》JZ22:从上往下打印二叉树 II食用更佳较二代版本,主要修改 tmp.append(node.val) 这句,tmp的添加appendinsert...原创 2020-12-08 22:04:21 · 225 阅读 · 0 评论 -
(python版)《剑指Offer》JZ60:把二叉树打印成多行 (又名:从上往下打印二叉树 II)
Leetcode配合(python版)《剑指Offer》JZ22:从上往下打印二叉树食用更佳比一代版本 只多了个 当前层的循环# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def l原创 2020-12-07 11:29:58 · 177 阅读 · 0 评论 -
(python版)《剑指Offer》JZ58:对称的二叉树
牛客【思路】我们首先判断特殊情况,当根节点为空,我们可以直接返回True,这时候是对称的不为空的时候,只要我们重新定义一个函数 restruct,判断左右子树,当两个子树为空的时候,直接返回True,这时候肯定是对称的再判断返回False的情况:两个子树有一个为空就要返回False,当然左右子树的值不相等也要返回False接下来,我们利用递归的思想,将左子树的左边和右子树的右边做为函数的输入,进行判断,不断递归,同理将左子树的右边和右子树的左边作为输出同时返回结果原创 2020-12-07 10:19:17 · 148 阅读 · 0 评论 -
(python版)《剑指Offer》JZ57:二叉树的下一个结点
我们以上图为例进行讲解,上图二叉树的中序遍历是d,b,h,e,i,a,f,c,g。我们以这棵树为例来分析如何找出二叉树的下一个结点。如果一个结点有右子树,那么它的下一个结点就是它的右子树的最左子结点。也就是说从右子结点出发一直沿着指向左子树结点的指针,我们就能找到它的下一个结点。例如,图中结点b的下一个结点是h,结点a的下一个结点是f。接着我们分析一下结点没有右子树的情形。如果结点是它父结点的左子结点,那么它的下一个结点就是它的父结点。例如,途中结点d的父节点(next)是b,f的父节点(n..原创 2020-12-07 09:46:35 · 275 阅读 · 0 评论 -
(python版)《剑指Offer》JZ39:判断是否为平衡二叉树
Leetcode牛客此题为 二叉树的深度 的拓展,建议先做上一题。该方法基于以下性质推出: 此树的深度 等于 左子树的深度 与 右子树的深度 中的 最大值 +1【方法】后序遍历 + 剪枝 (从底至顶)【思路】对二叉树做后序遍历,从底至顶返回子树深度,若判定某子树不是平衡树则 “剪枝” ,直接向上返回。【算法流程】recur(root) 函数:返回值:当节点root 左 / 右子树的深度差 ≤1 :则返回当前子树的深度,即节点 root 的左 / 右子树的深度最大值 +1 (原创 2020-12-07 00:19:21 · 248 阅读 · 0 评论 -
(python版)《剑指Offer》JZ38:二叉树的深度
树的遍历方式总体分为两类:深度优先搜索(DFS)、广度优先搜索(BFS);常见的 DFS : 先序遍历、中序遍历、后序遍历;常见的 BFS : 层序遍历(即按层遍历)。求树的深度需要遍历树的所有节点,本文将介绍基于 后序遍历(DFS) 和 层序遍历(BFS) 的两种解法。方法一:后序遍历(DFS)树的后序遍历 / 深度优先搜索往往利用 递归 或 栈 实现,本文使用递归实现。关键点: 此树的深度和其左(右)子树的深度之间的关系。显然,此树的深度 等于 左子树的深度 与 右子树的深度...原创 2020-12-06 22:45:28 · 227 阅读 · 0 评论 -
(python版)《剑指Offer》JZ24:二叉树中和为某一值的路径
本系列文章为《剑指Offer》刷题笔记。刷题平台:牛客网了解一下回溯算法:回溯法按 深度优先策略 搜索问题的解空间树。.首先从根节点出发搜索解空间树,当算法搜索至解空间树的某一节点时,先利用剪枝函数判断该节点是否可行(即能得到问题的解)。.如果不可行,则跳过对该节点为根的子树的搜索,逐层向其祖先节点回溯;否则,进入该子树,继续按深度优先策略搜索。解题图示当完成第一颗子树(根 到 叶子节点)的遍历,变量值如下图所示在7节点 的这一轮,得到 tar = -5, 无root.le原创 2020-12-05 22:48:49 · 273 阅读 · 0 评论 -
(python版)《剑指Offer》JZ22:从上往下打印二叉树
本系列文章为《剑指Offer》刷题笔记。刷题平台:牛客网牛客这个输入是按哪种排序构建的?有哪位前辈帮我解答一二?先以LeetCode的这个例子看吧题目要求的二叉树的 从上至下 打印(即按层打印),又称为二叉树的 广度优先搜索(BFS)。BFS 通常借助 队列 的先入先出特性来实现。欣赏大佬的图解注:queue 是一个叫做“queue队列”的列表, pop方法可返回被删元素1、7 同理,直至queue为空,res得到的便是按层遍历 / BFS 的结果# -*- codi原创 2020-12-05 11:09:42 · 207 阅读 · 0 评论 -
(python版)《剑指Offer》JZ18:二叉树的镜像
本系列文章为《剑指Offer》刷题笔记。刷题平台:牛客网这样好看点【思路】先交换根节点的两个子结点之后,我们注意到值为10、6的结点的子结点仍然保持不变,因此我们还需要交换这两个结点的左右子结点。做完这两次交换之后,我们已经遍历完所有的非叶结点。此时变换之后的树刚好就是原始树的镜像。交换示意图如下所示:【递归】先找非叶子节点,交换左子树和右子树终止条件:遇到叶子节点# -*- coding:utf-8 -*-# class TreeNode:# def __init__原创 2020-12-04 22:24:14 · 221 阅读 · 0 评论 -
(python版)《剑指Offer》JZ17:树的子结构
本系列文章为《剑指Offer》刷题笔记。刷题平台:牛客网这类题目与字符串匹配有些神似,求解过程大致分为两步:先将根节点匹配;根节点匹配后,对子树进行匹配。最终代码如下:代码中主要涉及 主函数checkSubTree和 dfs 函数 两个部分。与以上思路对应,主函数对应根节点的匹配,dfs 函数对应匹配其他节点。1.dfs 函数dfs 函数将注意力集中在了根节点已经匹配的情况。当从根节点同时开始向下遍历时,我们进行以下判断:如果 A 和 B 同时遍历到了 null,说明匹配成功,原创 2020-12-03 20:37:10 · 169 阅读 · 0 评论