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

101. 对称二叉树

时间:2023-01-28 15:33:54浏览次数:43  
标签:None right return self 二叉树 对称 101 root left

问题描述

https://leetcode.cn/problems/symmetric-tree/description/

解题思路

这个题,一看就是递归。既然如此,我们按照递归的一般思路来看,即问题的定义即为问题的解。

这个题目看似复杂,实际就是在求左子树的左孩子等于右子树的右孩子,左子树的右孩子等于右子树的左孩子。

我们给出了定义,那代码就迎刃而解了。

其实还有一种思路。我们可以把左子树或者右子树反转。反转之后判断左子树是否等于右子树即可。

代码一、纯递归定义

# 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: Optional[TreeNode]) -> bool:
        if root is None:
            return True
        return self.is_same(root.left, root.right)
    
    def is_same(self, p, q):
        if p is None and q is None:
            return True
        if p is None or q is None:
            return False
        if p.val == q.val:
            return self.is_same(p.left, q.right) and self.is_same(p.right, q.left)
        return False

 

代码二、反转后对比

# 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: Optional[TreeNode]) -> bool:
        if root is None:
            return True
        self.reverse(root.right)
        return self.is_same(root.left, root.right)

    def is_same(self, p, q):
        if p is None and q is None:
            return True
        if p is None or q is None:
            return False
        if p.val == q.val:
            return self.is_same(p.left, q.left) and self.is_same(p.right, q.right)
        return False

    def reverse(self, root):
        if not root:
            return
        root.left, root.right = root.right, root.left
        self.reverse(root.left)
        self.reverse(root.right)

 

标签:None,right,return,self,二叉树,对称,101,root,left
From: https://www.cnblogs.com/bjfu-vth/p/17070383.html

相关文章

  • 二叉树的实现-BSTree
    二叉树的实现-BSTree一、树和二叉树1-1树的定义翻译过来就是:树是由结点构成的,结点可以有也可以没有。若有结点,则肯定只有一个根结点。树是一种递归结构,俗称“套娃”......
  • 算法刷题 Day 21 | 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树
    今日内容530.二叉搜索树的最小绝对差501.二叉搜索树中的众数236.二叉树的最近公共祖先  详细布置530.二叉搜索树的最小绝对差需要领悟一下二叉树遍历......
  • 94. 二叉树的中序遍历
    问题链接https://leetcode.cn/problems/binary-tree-inorder-traversal/description/解题思路二叉树的中序遍历。其实深搜和递归是一个道理。搜索必然要通过递归来实现......
  • 代码随想录算法训练营第十三天 二叉树 | 二叉树深度优先遍历 | lc144 二叉树的前序遍
    二叉树种类满二叉树层数为n,节点数为\(2^n-1\)的二叉树完全二叉树除了底层都是满的,底层不一定满,但是从左到右连续二叉搜索树按一定顺序排列的二叉数,如某节点左侧节点......
  • 力扣111 二叉树的最小深度
    题目:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例:输入:root=[3,9,20,nul......
  • 力扣104 二叉树的最大深度
    题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,nu......
  • 二叉树前序、中序、后序遍历非递归写法
    packagedayone.tre;importjava.util.Stack;publicclassPreorderTraversal{/****先序遍历非递归写法*@paramhead*/publicstati......
  • 1~10000之间的所有对称数
    数组反转constfindPalindromeByReserveArray=()=>{constarr=[]for(leti=1;i<=10000;i++){conststr=String(i)const......
  • 二叉树公共祖先问题
    packagedayone.tre;/****o1和o2为head二叉树中的点,找出o1和02的最近公共祖先*/publicclassTest{publicstaticNodelowestAncestor(Nodehead,Nodeo......
  • 堆和二叉树的关系
    逻辑结构VS物理结构堆:逻辑结构是一颗二叉树(如下图)物理结构是一个数组(如下代码) //上图是一个堆(从小到大)可以用数组表示constheap=[-1,10,14,25,33,81,......