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

简介: LeetCode 剑指 Offer 28. 对称的二叉树

剑指 Offer 28. 对称的二叉树

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

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

示例 1:

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

输出:true

示例 2:

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

输出:false

解题

package tree.二叉树的镜像;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
/**
 * @Auther: truedei
 * @Date: 2020 /20-6-10
 * @Description: 二叉树镜像
 */
public class Solution {
    static public boolean isSymmetric(TreeNode root) {
        //根节点为null时,返回true,说明是
        return root == null?true:check(root.left,root.right);
    }
    private static boolean check(TreeNode left, TreeNode right) {
        if(left == null && right==null)
            return true;
        if(left==null || right==null || left.val != right.val)
            return false;
        return check(left.left,right.right) && check(left.right,right.left);
    }
    public static void main(String[] args) {
        TreeNode t1 = new TreeNode(1);
        TreeNode t2 = new TreeNode(2);
        TreeNode t3 = new TreeNode(2);
        TreeNode t4 = new TreeNode(3);
        TreeNode t5 = new TreeNode(4);
        TreeNode t6 = new TreeNode(4);
        TreeNode t7 = new TreeNode(3);
        t1.left=t2;
        t1.right=t3;
        t2.left=t4;
        t2.right=t5;
        t3.left=t6;
        t3.right=t7;
        boolean bool = isSymmetric(t1);
        System.out.println(bool);
    }
}
class TreeNode {
    int val;//每个节点存放的数据
    TreeNode left;//左节点
    TreeNode right;//右节点
    TreeNode(int x) { val = x; }
}

核心代码:

static public boolean isSymmetric(TreeNode root) {
  //如果传过来的是null,则返回true,否则就去检查左右节点
    return root == null?true:check(root.left,root.right);
}
//负责递归检查左右节点
private static boolean check(TreeNode left, TreeNode right) {
  //如果左右都为null,说明该二叉树也是对称的
    if(left == null && right==null)
        return true;
    //如果缺少左右子节点的某一个,或者不相等,那就不是一颗对称二叉树
    if(left==null || right==null || left.val != right.val)
        return false;
  //否则就检查,该二叉树的左节点的左和右节点的右;和检查另外两个
  //如果都是true,说明对称
    return check(left.left,right.right) && check(left.right,right.left);
}
目录
相关文章
|
14天前
|
算法
二刷力扣--二叉树(3)
二刷力扣--二叉树(3)
|
14天前
二刷力扣--二叉树(2)
二刷力扣--二叉树(2)
|
14天前
二刷力扣--二叉树(1)基础、遍历
二刷力扣--二叉树(1)基础、遍历
|
18天前
|
存储 算法 数据可视化
力扣156题最全解法:如何上下翻转二叉树(递归与迭代方法详解,附图解)
力扣156题最全解法:如何上下翻转二叉树(递归与迭代方法详解,附图解)
|
14天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
14天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
15天前
|
索引
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
|
15天前
|
算法
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
|
15天前
|
算法 容器
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
|
15天前
【LeetCode刷题】专题三:二分查找模板
【LeetCode刷题】专题三:二分查找模板
【LeetCode刷题】专题三:二分查找模板