【算法】相同的树与对称二叉树

目录

前言

相同的树

题目描述

解题思路

代码

对称二叉树

题目描述

解题思路

代码


前言

本文主要介绍力扣100题相同的树和101题对称二叉树的解题思路和代码

这两道题是递归算法用于二叉树的入门算法,对于理解递归过程很有帮助

相同的树

题目描述

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

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

示例

输入: p = 1,2,3, q = 1,2,3
**输出:**true

解题思路

利用递归思路求解,在思考递归过程时只用思考本层和紧挨着下一层的情况,再往下无论有多少层都是一样的处理逻辑,很容易写出递归代码

对于本题来说,要判断是否是同样的树,只需判断当前对应树节点(如图中的两个根节点进行比较)的值是否相同,以及左子树和右子树是否相同,而判断左子树和右子树是否相同时所使用的逻辑是相同的,即反复调用相同的函数,这就是递归的思想

使用递归算法很重要的一点是终止条件,本题的终止条件是当前对应树节点出现空的情况,表示已经遍历到头了,结合代码更容易理解

代码

python 复制代码
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
class Solution:
    def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
        if p is None or q is None:
            return p is q  # 必须都是 None才是true
        return p.val == q.val and self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)

对称二叉树

题目描述

给你一个二叉树的根节点 root , 检查它是否轴对称。

示例

输入: root = 1,2,2,3,4,4,3
**输出:**true

解题思路

本题仍然可以用递归算法求解,问题可这样拆分:

先把根节点单独拿出来,从图中值为 2 的两个节点开始,后面的过程就可以递归了:每次递归都先判断左边节点的值是否与右边节点的值相同,且左边节点的左子树是否与右边节点的右子树镜像,左边节点的右子树是否与右边节点的左子树镜像,而判断左右子树镜像的逻辑与上述判断过程相同(先判断值相同...),这就体现了递归(可根据图理解)

递归的终止条件是出现空节点,结合遍历到头的特殊情况去判断,完整代码如下

代码

python 复制代码
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
class Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        if root is None:#特判
            return True
        else:
            p=root.left
            q=root.right
            return self.isMirror(p,q)

    def isMirror(self,p: Optional[TreeNode],q: Optional[TreeNode]):
        #判断左右子树是否镜像
        if p is None or q is None:
            return p is q
        else:
            return p.val==q.val and self.isMirror(p.right,q.left) and self.isMirror(p.left,q.right)
相关推荐
鬼手点金7 小时前
模型即 Agent:当模型本身成为产品
开发语言·前端·人工智能·python·机器学习
田里的水稻7 小时前
PyTorch-Dataset\DataLoader数据加载
人工智能·pytorch·python
海绵宝宝转agent7 小时前
2026-10-16 4算法+1面经
算法
卷无止境8 小时前
Python 3.14 自由线程:拆掉 GIL 之后,我们到底得到了什么
后端·python
染指11108 小时前
147.Agent-LangGraph归并函数
开发语言·人工智能·python·langchain·agents
小白学大数据8 小时前
逆向分析短视频平台 a_bogus 参数:从 JavaScript 混淆到 Python 复现
javascript·python·音视频
小poop8 小时前
基础排序算法详解——插入、选择与交换排序
算法·排序算法
青蓝智慧马老师8 小时前
想学数据分析但零基础,正确顺序不是先学 Python
大数据·人工智能·算法
外收内放8 小时前
数据分析(数据清洗)
python·学习·数据分析
jeo陽8 小时前
05-数组与冒泡排序:第一个数据结构与经典算法
c语言·数据结构·算法