首页 > 其他分享 >leedcode 对称二叉树

leedcode 对称二叉树

时间:2024-02-05 18:33:09浏览次数:34  
标签:right return self tree leedcode queue 二叉树 对称 root

迭代法:

# Definition for a binary tree node.
# 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) :
        queue=[root,root]#等效为比较两棵树
        if not root:
            return  True
        while queue:
            tree_1=queue.pop(0)#第一棵树
            tree_2=queue.pop(0)#第二棵树
            if not tree_1 and not tree_2:#两颗树都为空
                continue
            elif not tree_1 or not tree_2:#单论这句的意思是有一个为空  但上面排除了两颗都为空的情况
                return False
            elif tree_1.val!=tree_2.val:#值不相等
                return False
            queue.append(tree_1.left)
            queue.append(tree_2.right)
            queue.append(tree_1.right)
            queue.append(tree_2.left)
        return True

递归法:

from typing import Optional

class Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        # 如果根节点为空,返回 True,因为空树视为对称
        if not root:
            return True
        # 调用 isMirror 函数,传入左子树和右子树进行比较
        return self.isMirror(root.left, root.right)

    def isMirror(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
        # 如果两棵树的当前节点都为空,说明它们是对称的
        if not p and not q:
            return True
        # 如果其中一个节点为空而另一个不为空,说明不对称
        elif not p or not q:
            return False
        # 如果两个节点都不为空,但它们的值不相等,说明不对称
        elif p.val != q.val:
            return False
        # 递归调用 isMirror 函数,比较左子树的左节点和右子树的右节点,以及左子树的右节点和右子树的左节点是否对称
        # 返回递归调用的结果,表示两个子树是否对称
        return self.isMirror(p.left, q.right) and self.isMirror(p.right, q.left)

 

标签:right,return,self,tree,leedcode,queue,二叉树,对称,root
From: https://www.cnblogs.com/yyyjw/p/18008625

相关文章

  • leedcode 二叉树的中序遍历
    自己写的classSolution:def__init__(self):self.res_list=list()definorderTraversal(self,root):ifroot:ifroot==None:returnelse:self.inorderTraversal(root.left)......
  • 对称字符串-od-python
    题目描述对称就是最大的美学,现有一道关于对称字符串的美学。已知:第1个字符串:R第2个字符串:BR第3个字符串:RBBR第4个字符串:BRRBRBBR第5个字符串:RBBRBRRBBRRBRBBR相信你已经发现规律了,没错!就是第个字符串=第i-1号字符串取反+第i-1号字符串取反(R->B,B->R)现在告诉你n......
  • leedcode 合并两个有序数组 切片 原地修改
    使用nums1[:m+n]=nums1_new时,这是在原地修改nums1列表。具体来说,这个语句使用切片将nums1中前m+n个元素替换为nums1_new中的元素。这样做的结果是,nums1的原始内存空间被修改,而不是创建一个新的列表对象。使用nums1=nums1_new,这将创建一个新的列表对象,并让nu......
  • 代码随想录 day37 单调递增的数字 监控二叉树
    单调递增的数字只想到暴力解法然后超时这里思路是如果从后往前发现不是递增序列那就把前一位--后一位数字变成9然后维护这个变成9的坐标遍历完后把后面的也全部变成9这个对现在的我来说太难了先贴段代码理解一下吧classSolution{intres=0;publicintminCam......
  • 二叉树的广度遍历/层序遍历
    privateInteger[]breadthSearch(TreeNoderoot){ List<Integer>list=newArrayList<Integer>();//存放节点值 ArrayDeque<TreeNode>queue=newArrayDeque<TreeNode>();//队列,用来存放节点 queue.add(root); while(!queue.isEmpty()){ TreeNo......
  • [刷题笔记] ybt 1364:二叉树遍历(flist)
    Problem_LinkDescription树和二叉树基本上都有先序、中序、后序、按层遍历等遍历顺序,给定中序和其它一种遍历的序列就可以确定一棵二叉树的结构。假定一棵二叉树一个结点用一个字符描述,现在给出中序和按层遍历的字符串,求该树的先序遍历字符串。Analysis我们先前做过给定前序......
  • java非对称加密,rsa
     1.甲方构建密钥对儿,将公钥公布给乙方,将私钥保留。2.甲方使用私钥加密数据,然后用私钥对加密后的数据签名,发送给乙方签名以及加密后的数据;乙方使用公钥、签名来验证待解密数据是否有效,如果有效使用公钥对数据解密。3.乙方使用公钥加密数据,向甲方发送经过加密后的数据;甲方获得加......
  • 二叉树(1)
    目录110平衡二叉树257二叉树的所有路径null前面一些简单题就没放上来,放的都是一开始没思路的110平衡二叉树显然这题不能单纯的返回truefalse还需要把这一层的高度接住所以用-1作为标识符,如果=-1说明下层已经有不平衡了,那么都返回-1否则就返回这棵树的高度classSolution{......
  • 【树】二叉树的应用 I
    目录1.题目列表2.应用2.1.Leetcode226.翻转二叉树2.1.1.题目2.1.2.解题思路2.1.2.1.方法一:前序遍历2.1.2.2.方法二:后序遍历2.1.3.代码实现2.2.Leetcode116.填充每个节点的下一个右侧节点指针2.2.1.题目2.2.2.解题思路2.2.2.1.方法一:广度优先搜索2.2.2.2.方法二:深......
  • 如何学习算法:什么时完全二叉树?完全二叉树有什么特点?
    完全二叉树我们知道树是一种非线性数据结构。它对儿童数量没有限制。二叉树有一个限制,因为树的任何节点最多有两个子节点:左子节点和右子节点。什么是完全二叉树?完全二叉树是一种特殊类型的二叉树,其中树的所有级别都被完全填充,除了最低级别的节点从尽可能左侧填充之外。完全二叉树的......