• 剑指 Offer 28. 对称的二叉树


    1. 题目

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

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

    2. 示例

    示例1

    输入:root = [1,2,2,3,4,4,3]
    输出true

     示例2

    输入:root = [1,2,2,null,3,null,3]
    输出false

    3. 题解

    此题其实跟剑指Offer26 树的结构类似的解法。

    此处采用的是左右查对比:

    • 一个查找从左边开始,一个查找从右边开始
    • 判段左开始的左子树是否等于右开始的右子树,左开始的右子树是否等于右开始的左子树。将其都的当成根节点的话,只需要判断根节点是否相等,然后递归的时候加入左右对比。
    • if(A.val == B.val) {
            return isEqual(A.left, B.right) && isEqual(A.right, B.left);
      } else {
            return false;
      }

    4. 实现

     1 public class IsSymmetric28 {
     2     // 队列
     3     // 此题跟剑指 Offer 26. 树的子结构类似
     4     public boolean isSymmetric(TreeNode root) {
     5         // 空节点,返回true
     6         if(root == null) return true;
     7         // 左右分别查找对比
     8         return isEqual(root.left, root.right);
     9     }
    10     public boolean isEqual(TreeNode A, TreeNode B) {
    11         // 如果两个都为Null,说明找到子节点都相同
    12         if(A == null && B == null) return true;
    13         // 存在其中一个为null,说明不对称
    14         if(A == null || B == null) return false;
    15         // 如果相等
    16         if(A.val == B.val) {
    17             // 左右查找对比
    18             return isEqual(A.left, B.right) && isEqual(A.right, B.left);
    19         } else {
    20             // 不等返回false
    21             return false;
    22         }
    23     }
    24 }

    5. 结语

      努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!

      如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)。

     

     

     

     

     

     

     

     

    但行好事 莫问前程
  • 相关阅读:
    innodb中的锁
    41. First Missing Positive
    268. Missing Number
    154. Find Minimum in Rotated Sorted Array II(循环数组查找)
    局部最小值(二分)
    92. Reverse Linked List II 翻转链表II
    leetcode Reverse Nodes in k-Group翻转链表K个一组
    Mysql分区、分表、分库
    字符串循环移位(2次翻转的思路)
    android源码中,在系统多媒体数据库中增加一个字段
  • 原文地址:https://www.cnblogs.com/haifwu/p/14975940.html
Copyright © 2020-2023  润新知