数据结构与算法——Java实现 41.对称二叉树

目录

[101. 对称二叉树](#101. 对称二叉树)

思路

代码

Java代码及测试用例


莫道浮云终蔽日

总有雾散云开时

昨日之深渊

今日之浅谈

------ 24.10.20

101. 对称二叉树

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

示例 1:

复制代码
输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

复制代码
输入:root = [1,2,2,null,3,null,3]
输出:false

思路

若要判断一个二叉树是否对称,只需要判断从根节点的下一层开始是否轴对称,判断轴对称只需要判断左孩子的左孩子节点是否与右孩子的右孩子节点相等,遍历到叶子节点,逐层进行判断,是否从根节点开始左孩子的左孩子...的左孩子与右孩子的右孩子......的右孩子节点完全相等


代码

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isSymmetric(TreeNode root) {
        return check(root.left,root.right);
    }

    private boolean check(TreeNode left,TreeNode right){
        if(left == null && right == null){
            return true;
        }
        if(left == null || right == null){
            return false;
        }
        if (left.val != right.val){
            return false;
        }
        return check(left.left,right.right) && check(left.right,right.left);
    }
}

Java代码及测试用例

java 复制代码
public class LeetCode101SymmetryBinaryTree {
    public boolean isSymmetric(TreeNode root) {
        return check(root.left,root.right);
    }

    private boolean check(TreeNode left,TreeNode right){
        if(left == null && right == null){
            return true;
        }
        if(left == null || right == null){
            return false;
        }
        if (left.value != right.value){
            return false;
        }
        return check(left.left,right.right) && check(left.right,right.left);
    }

    public static void main(String[] args) {
        TreeNode root = new TreeNode(
                1,
                new TreeNode(2,new TreeNode(3),new TreeNode(4)),
                new TreeNode(2,new TreeNode(4),new TreeNode(3))
        );
        LeetCode101SymmetryBinaryTree res =  new LeetCode101SymmetryBinaryTree();
        System.out.println(res.isSymmetric(root));

        TreeNode root1 = new TreeNode(
                11,
                new TreeNode(7,
                        new TreeNode(5,
                                new TreeNode(3),
                                new TreeNode(6)),
                        new TreeNode(9,
                                new TreeNode(2),
                                new TreeNode(8))
        ),
                new TreeNode(11,
                        new TreeNode(4,
                                new TreeNode(9),
                                new TreeNode(28)),
                        new TreeNode(5)
                )
        );

        System.out.println(res.isSymmetric(root1));
    }
}
相关推荐
梁辰兴4 小时前
数据结构:排序
数据结构·算法·排序算法·c·插入排序·排序·交换排序
野犬寒鸦4 小时前
力扣hot100:搜索二维矩阵 II(常见误区与高效解法详解)(240)
java·数据结构·算法·leetcode·面试
菜鸟得菜4 小时前
leecode kadane算法 解决数组中子数组的最大和,以及环形数组连续子数组的最大和问题
数据结构·算法·leetcode
楼田莉子5 小时前
C++算法专题学习——分治
数据结构·c++·学习·算法·leetcode·排序算法
ulias2126 小时前
各种背包问题简述
数据结构·c++·算法·动态规划
JuneXcy7 小时前
结构体简介
c语言·数据结构·算法
j_xxx404_9 小时前
数据结构:栈和队列力扣算法题
c语言·数据结构·算法·leetcode·链表
南莺莺9 小时前
假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写一个算法来判别,表达式中的括号是否配对,以字符“\0“作为算术表达式的结束符
c语言·数据结构·算法·
野犬寒鸦9 小时前
力扣hot100:旋转图像(48)(详细图解以及核心思路剖析)
java·数据结构·后端·算法·leetcode
一枝小雨10 小时前
【OJ】C++ vector类OJ题
数据结构·c++·算法·leetcode·oj题