首页 > 其他分享 >二叉树 | 递归法 101.对称二叉树

二叉树 | 递归法 101.对称二叉树

时间:2024-05-19 18:20:09浏览次数:32  
标签:right False 递归 self 二叉树 101 节点 left

leetcode 101.对称二叉树

题目

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

解题思路

递归法,判断左节点的左孩子是否可以翻转成右节点的右孩子(左节点的左孩子 == 右节点的右孩子,左节点的右孩子 == 右节点的左孩子)
递归三步骤:
1、确定递归函数的入参和返回值 入参:左节点、右节点 返回值:bool值
2、递归的终止条件
(1)左节点为空,右节点为空 返回True
(2)左节点为空,右节点不为空 返回False
(3)左节点不为空,右节点为空 返回False
(4)左节点不为空,右节点不为空,左节点 != 右节点 返回False
3、单层遍历的条件和逻辑(递归的具体逻辑):左节点不为空,右节点不为空,左节点 == 右节点
判断左节点是否可以翻转成右节点
(1)外侧节点比较 左节点的左孩子 == 右节点的右孩子
(2)内侧节点比较 左节点的右孩子 == 右节点的左孩子
(3)外侧节点比较结果一样,且内侧节点比较结果一样 -> 左节点可以翻转成右节点

实现代码

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:
        return self.compare(root.left, root.right)

    def compare(self, left, right):
        if not left and not right:  # 左节点右右节点都为空,只有根节点,返回True
            return True
        elif left and not right:    # 左节点不为空,右节点为空,返回False
            return False
        elif right and not left:    # 左节为空,右节点不为空,返回Fasle
            return False
        elif left.val != right.val: # 左节点和右节点都不为空,但左节点的的值不等于右节点的值,返回False
            return False
            
        outside = self.compare(left.left, right.right)  # 外侧:比较左节点的左孩子和右节点的右孩子
        inside = self.compare(left.right, right.left)   # 内侧:比较左节点的右孩子和右节点的左孩子
        isSameValue = outside and inside    # 外侧和内侧的值都为True,则返回True
        return isSameValue

标签:right,False,递归,self,二叉树,101,节点,left
From: https://www.cnblogs.com/wanglin2016/p/18200555

相关文章

  • 二叉树 | 迭代法 102.二叉树的层序遍历 429. N 叉树的层序遍历 226.翻转二叉树
    leetcode102.二叉树的层序遍历题目102.二叉树的层序遍历给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。解题思路实现代码classTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valse......
  • 二叉树的递归遍历 144.二叉树的前序遍历 145.二叉树的后序遍历 94.二叉树的中序遍历
    leetcode144.二叉树的前序遍历题目xxx解题思路实现代码leetcode145.二叉树的后序遍历题目xxx解题思路实现代码leetcode94.二叉树的中序遍历题目xxx解题思路实现代码......
  • P10125 「Daily OI Round 3」Simple 题解
    题目传送门简单模拟,主要考察字符串。首先输入一个char类型的数组,然后直接遍历每一位是否为Acoipp或Svpoll即可。//Simple//codeby:cq_irritater//time:2024/02/04#include<bits/stdc++.h>usingnamespacestd;chara[10];intmain(){//freopen("......
  • 92. 递归实现指数型枚举
    传送锚点:https://www.acwing.com/problem/content/94/从1∼n这n个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数n。输出格式每行输出一种方案。同一行内的数必须升序排列,相邻两个数用恰好1个空格隔开。对于没有选任何数的方案,输出空行。本......
  • Games101-3 triangle
    rasterize==drawingontothescreencolor=(red,green,blue)pixelindicesarefrom(0,0)to(width-1,height-1)pixel(x,y)iscenteredat(x+0.5,y+0.5)光栅化判断一个像素的中心点是否需要draw采样的方法--将函数离散化如果中心再三角形内。如何判断......
  • Games101-5 shadering
    shader对不同物体应用不同的材质定义:shading!=shadowdiffusereflection漫反射光照角度不同,则反射程度也不同于此同时物体离光源越远,反射程度越低高光项镜面反射和视线比较接近的时候使用半程向量计算高光注:半程向量比较好算,反射向量比较难算指数p:cos......
  • Games101-6 Geometry
    implicit--隐式几何explicit--显示几何implicit点不需要知道位置,但是可以用点之间的关系表示(按照类别归类)E.g.allpointsin3D,where$x2+y2+z^2=1$更通用的表示$f(x,y,z)=0$劣势:不直观优势:可以很简单的判断一个点是否再物体内或者外。explicit......
  • Games101-7 raytracing
    shadowmapping思想:光源可以看到点,人也可以看到的点。---不在shadow中的点只能处理点光源深度不一致浮点数的精度问题。软/硬阴影raytracing直线传播不会碰撞从光源出发,到人眼光线是可以反射的多次弹射的光纤追踪rayequation对隐式表面对显示......
  • Games101-7 raytracing2
    辐射度量学basicradiometry---精确的描述光光线的强度Iis10。在屋里层次准确的描述光Newterms:radiantfluxintensityirradianceradianceradiantenergyandflux,radiantintensityRadiantintensity中角度是如何定义的单位立体角Radiantinte......
  • Games101-8 material and appearance
    漫反射的prdfglossymaterial折射BTDF全反射的情况:$n_i$远大于$n_{t}$也就是说入射密度大。因此水底看空气---会发生全反射情况。fresnelreflectionterm菲涅尔项绝缘体见到那说就是如果如何入射光和法线几乎平行---则大量会被反射。导体......