python每日一题【剑指 Offer 28. 对称的二叉树】
admin
2024-03-25 03:26:36
0

day25-2022.11.21

题目信息来源

作者:Krahets

链接:https://leetcode.cn/leetbook/read/illustration-of-algorithm

来源:力扣(LeetCode)

剑指 Offer 28. 对称的二叉树

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

	1/ \2   2/ \ / \
3  4 4  3

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

	1/ \2   2\   \3    3
输入:root = [1,2,2,3,4,4,3]
输出:true输入:root = [1,2,2,null,3,null,3]
输出:false

限制:

  • 0 <= 节点个数 <= 1000

题解:辅助栈法

遍历树的方式用的是递归,不过这里每次 pop 的时候和 append 的时候有一点设计。每次 pop 出的是一组需要镜像的节点,即前两个节点。然后判断是否镜像

  • 如果都为空,则是镜像,继续 continue
  • 只有一方为空,则不是镜像,return False
  • 都不为空,比较值:
    • 相同,则是镜像,继续 continue
    • 不同,则不是镜像,return False

continue 的情况下,需要 append 的顺序需要注意:并不是父节点下的两个子节点相同就是对的。headnode.left 应该和 tailnode.right 镜像,tailnode.left 应该和 head.right 镜像。所以 append 的时候也应该是这个顺序。看看能不能尝试递归的办法。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = Noneclass Solution:def isSymmetric(self, root: TreeNode) -> bool:if not root:return Truestack = [root.left, root.right]while stack:headnode = stack.pop(0)tailnode = stack.pop(0)if headnode==None and tailnode==None:continueif (not headnode and tailnode) or (headnode and not tailnode):return Falseif headnode.val!=tailnode.val:return Falsestack.append(headnode.left)stack.append(tailnode.right)stack.append(headnode.right)stack.append(tailnode.left)return True

题解:递归法

递归法总是要考虑好怎么返回,这个是困扰我很久的问题了。(递归参数,终止条件,返回值,递推工作)

  • 递归参数:headnodetailnode,对应关系在辅助栈方法里已经写了。
  • 终止条件和返回值:
    • 如果都为空,return True,因为它已经不能迭代了
    • 只有一方为空,则不是镜像,return False
    • 都不为空,比较值:
      • 相同,则是镜像,迭代
      • 不同,则不是镜像,return False
  • 递归和返回值:需要注意的是,除了初始的 root.rightroot.left 。其他都应该是两组的比较,两个都 True,才是 True。这个也是我一直写不出来的地方。
class Solution:def isSymmetric(self, root: TreeNode) -> bool:def check(headnode, tailnode):if not headnode and not tailnode:return Trueif not headnode or not tailnode or (headnode.val!=tailnode.val):return Falsereturn check(headnode.left, tailnode.right) and check(headnode.right, tailnode.left)return not root or check(root.left, root.right)

相关内容

热门资讯

国民性创新,越来越阳春白雪 问一个问题,最近两年爆火的创新,从生成式AI到人形机器人,到底是离大众越来越近,还是离大众越来越远?...
男子被显示欠银行1000万亿索... 男子被显示欠银行1000万亿索赔200万遭拒,银行仅愿赔偿3万元
研究显示美国散户投资者推动杠杆... 来源:环球市场播报 Direxion公司联合Vanda Research与The Compound ...
高瓴、李录、巴菲特最新持仓披露... 最近,随着美股13F文件的披露,多家私募机构2025Q4最新调仓情况浮出水面。之前的文章,证星研究院...
原创 老... 四十年代的北京珠市口路口,正处于从民国向新中国过渡的时期,它既保留着清末民初形成的鲜明社会分层特征,...
原创 相... 在金融圈,流行一个词叫“估值修复”。意思是股价跌狠了,总会涨回来。 但阿睿发现,自己在相亲市场的估值...
上海楼市重磅新政,非沪籍大松绑... wumiancaijing.com / 最热的泛财经新闻,都在这儿了。 重要提醒!!!为防失联,请“...
春节白酒消费:高端产品热度升高... 来源:新京报 春节是酒水消费传统旺季,马年春节期间,白酒动销稳健复苏。多家机构调研发现,白酒消费呈现...
黄金暴涨的秘密找到了!不是散户... 过去两年,黄金市场最容易被忽视的一条主线,并不是价格本身的起伏,而是一个更为深层的结构性变化——全球...
刘强东投资50亿进军游艇产业,... 极目新闻记者 陈红 刘强东近日创立了独立游艇品牌Sea Expandary,进入游艇产业,计划从研...
韩国驻美大使:密切关注美方新关... 据韩联社报道,韩国驻美国大使康京和2月24日就美国总统特朗普在联邦最高法院裁定“对等关税”违法后宣布...
现货黄金刚刚涨破5200美元关... 25日,现货黄金持续拉涨,盘中再次突破5200美元大关,涨超1.3%。 瑞银(UBS)分析师此前在...
【银行业展望系列】五篇大文章:... 当前银行息差持续承压、规模扩张的增长红利逐渐消退,已经陷入内卷式的同质化竞争。“规模为王”的旧模式将...
原创 一... 美国总统唐纳德·特朗普迅速恢复了之前被最高法院废除的关税政策,这一急转弯让本就面临成本激增压力的美国...
收盘:上证指数、深证成指涨1.... 上证指数(000001)涨0.72%,深证成指(399001)涨1.29%,创业板指(399006)...
蔡宏波、毛健:美国贸易逆差“转... 近年来,美国政府反复将“贸易失衡”描述为事关国家安全的核心问题。从政策实践看,自2018年以来,美国...
五粮液集团入股四川三江汇海融资... 天眼查显示,近日,四川三江汇海融资租赁有限公司发生工商变更,新增四川省宜宾五粮液集团有限公司为股东,...
A股高开高走:周期股延续强势,... A股三大股指2月25日集体高开。早盘震荡走高,午后震荡回落,全天呈现高位震荡走势。 从盘面上看,周期...