zoukankan      html  css  js  c++  java
  • 【Leetcode 二叉树】 对称二叉树(101)

    题目

    给定一个二叉树,检查它是否是镜像对称的。

    例如,二叉树 [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
    

    进阶:你可以运用递归和迭代两种方法解决这个问题吗?

    解答

    分析:先序、中序、后序遍历的结果不能用来比较是否对称。应该用(头-左-右)和(头-右-左)的遍历顺序比较。(头-左-右)就是先序遍历,(头-右-左)不是先序、中序、后序。

    递归,对称的条件:先序遍历(头-左-右)和(头-右-左)遍历过程一致。
    用Null判断树的结尾。

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    
    # 比较两种遍历结果是否相等 1: 头--左--右  2:头--右--左
    class Solution:
        def isSymmetric(self, root):
            if not root or (not root.left and not root.right):
                return True
            
            def compare_node(node1, node2):
                if node1 == None and node2 == None:  # node1 node2的子树比较到底了,说明对称
                    return True
                if node1 == None or node2 == None:  # 其中一个为空,不对称
                    return False
                
                if node1.val != node2.val:  # 值不等
                    return False
                ans1 = compare_node(node1.left, node2.right)  # 如果对称,node1.left应该等于node2.right
                if not ans1:  # 不等
                    return False
                else:  # node1.left等于node2.right,再比较node1.right==node2.left
                    return compare_node(node1.right, node2.left)
                
            return compare_node(root.left, root.right)
    
  • 相关阅读:
    JAVA005-基本数据类型变量的存储
    JAVA003-变量、数据类型
    Python_pandas数据处理_学习
    python_性能FPS
    DB_004_创建表
    DB_003_关系数据库标准语言(SQL)
    DB_002_数据库的创建和管理
    DB_001_概念模型设计
    虚幻蓝图学习笔记 简单VR功能实现
    虚幻蓝图学习笔记 制作第一人称(实现功能:捡枪,换枪,扔枪,仍炸弹等)(一)
  • 原文地址:https://www.cnblogs.com/ldy-miss/p/13059761.html
Copyright © 2011-2022 走看看