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

目录

前言

相同的树

题目描述

解题思路

代码

对称二叉树

题目描述

解题思路

代码


前言

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

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

相同的树

题目描述

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

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

示例

输入: 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)
相关推荐
无缘之缘4 分钟前
蓝桥杯手把手教你备战(C/C++ B组)(最全面!最贴心!适合小白!)
c语言·c++·算法·蓝桥杯
Dfreedom.6 分钟前
【实战篇】神经网络在回归任务中的应用
人工智能·神经网络·算法·机器学习·回归
嘿黑嘿呦8 分钟前
17届蓝桥杯考前准备
算法·职场和发展·蓝桥杯
Q741_1478 分钟前
每日一题 3740. 三个相等元素之间的最小距离 I 3741. 三个相等元素之间的最小距离 II 模拟 哈希表 C++ 题解
c++·算法·leetcode·模拟·数组·哈希表
万粉变现经纪人9 分钟前
如何解决 pip install ta-lib 报错 本地 TA-Lib 库未安装 问题
数据库·python·scrapy·oracle·bug·pandas·pip
PD我是你的真爱粉9 分钟前
LangChain 与 LangGraph 完全指南:核心组件、架构原理、编排机制与 LlamaIndex 集成
算法·架构·langchain
Ancelin安心10 分钟前
西工大noj(C/C++)100题参考题解及注意事项(2024)
c语言·c++·ide·windows·vscode·算法
乔克199811 分钟前
代理连接失败的问题
python·httpx
猫咪老师12 分钟前
Day11 Python 关于线程和进程的最详细介绍!
后端·python
|华|13 分钟前
Python操作MySQL数据库
数据库·python·mysql