数据结构与算法——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));
    }
}
相关推荐
Dizzy.51711 分钟前
数据结构(查找)
数据结构·学习·算法
Jared_devin3 小时前
数据结构——模拟栈例题B3619
数据结构
sushang~3 小时前
leetcode21.合并两个有序链表
数据结构·链表
sjsjs115 小时前
【数据结构-并查集】力扣1202. 交换字符串中的元素
数据结构·leetcode·并查集
WYF_1115016 小时前
数据结构——单向循环链表、双链表、双向循环链表
数据结构
没有不重的名么9 小时前
MATLAB基础学习相关知识
数据结构·学习·matlab
ll7788119 小时前
LeetCode每日精进:225.用队列实现栈
c语言·开发语言·数据结构·算法·leetcode·职场和发展
ん贤11 小时前
蓝桥杯学习大纲
数据结构·算法
天若有情67311 小时前
【数据结构】C++实现链表数据结构
数据结构·c++·链表
skaiuijing13 小时前
buf存储器缓存
网络·数据结构