力扣(LeetCode) 100: 相同的树 - 解法思路

问题概述

给定两个二叉树的根节点 pq,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

解法 1:迭代(使用队列)

工作原理

使用队列逐层比较节点(BFS 方法):

python 复制代码
class Solution:
    def isSameTree(self, p, q):
        queue = [(p, q)]
        
        while queue:
            node1, node2 = queue.pop(0)
            
            if not node1 and not node2:
                continue
            
            if not node1 or not node2:
                return False
            
            if node1.val != node2.val:
                return False
            
            queue.append((node1.left, node2.left))
            queue.append((node1.right, node2.right))
        
        return True

复杂度分析

  • 时间复杂度 : O(n²) - queue.pop(0) 在 Python 列表中是 O(n) 操作
  • 空间复杂度: O(n) - 队列在最坏情况下可以容纳 n/2 个节点(完全树)

何时使用

  • 递归的替代方案
  • 避免非常深的树的潜在栈溢出
  • 需要逐层比较时有用

解法 2:递归(推荐)

工作原理

递归地比较两个树中对应的节点:

python 复制代码
class Solution:
    def isSameTree(self, p, q):
        if not p and not q:
            return True
        
        if not p or not q:
            return False
        
        if p.val != q.val:
            return False
        
        return (self.isSameTree(p.left, q.left) and 
                self.isSameTree(p.right, q.right))

复杂度分析

  • 时间复杂度: O(n) - 每个节点恰好访问一次
  • 空间复杂度: O(h) - 递归栈深度等于树的高度(最坏情况 O(n) 对于倾斜树)

何时使用

  • 推荐 - 最直观和简洁的解决方案
  • 自然的递归结构匹配树结构
  • 易于理解和实现

对比

方法 时间 空间 最佳适用
迭代(列表) O(n²) O(n) 不推荐 - 由于 pop(0) 较慢
递归 O(n) O(h) 大多数情况,直观,最快

总结

递归解决方案通常更受欢迎,因为:

  1. 更快 - 实际性能更好(O(n) vs O(n²))
  2. 更简单 - 更直观,易于理解
  3. 自然匹配 - 递归完美匹配树结构

关键洞察是在每个节点检查三个条件:两者都是 None(相同)、一个是 None(不同)或值匹配(继续递归)。

相关推荐
2501_92495269几秒前
C++模块化编程指南
开发语言·c++·算法
Epiphany.556几秒前
题目 3146: 蓝桥杯2023年第十四届省赛真题-网络稳定性 时间限制: 1.5s 内存限制: 256MB
职场和发展·蓝桥杯
qzhqbb几秒前
差分隐私与大模型+差分隐私在相关领域应用的论文总结
人工智能·算法
2401_831920744 分钟前
基于C++的爬虫框架
开发语言·c++·算法
我是咸鱼不闲呀4 分钟前
力扣Hot100系列22(Java)——[图论]总结(岛屿数量,腐烂的橘子,课程表,实现Trie(前缀树))
java·leetcode·图论
2401_846341655 分钟前
Python Lambda(匿名函数):简洁之道
jvm·数据库·python
2401_879693878 分钟前
进阶技巧与底层原理
jvm·数据库·python
阿_旭10 分钟前
基于YOLO26深度学习的【桃子成熟度检测与分割系统】【python源码+Pyqt5界面+数据集+训练代码】图像分割、人工智能
人工智能·python·深度学习·桃子成熟度检测
MSTcheng.10 分钟前
【优选算法必修篇——位运算】『面试题 01.01. 判定字符是否唯一&面试题 17.19. 消失的两个数字』
java·算法·面试
weixin_4219226911 分钟前
模板元编程性能分析
开发语言·c++·算法