Leetcode101.对称二叉树

题目描述

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

思路分析

  1. 二叉树,及每一个节点的子节点不超过两个
  2. 题目要求检查一个二叉树是否是镜像对称的,及要检查它本身及其它的每一个子节点是否也镜像对称
  3. 因此可以使用递归的思路
  4. 递归的遍历每一个节点,判断与其镜像对称的另一个节点的值是否相等,
  5. 并且判断左子树的左节点和右子树右节点是否对称,左子树的右节点和右子树的左节点是否对称
  6. 源码见下

源码及分析

/**
     *
     * @param root 二叉树根节点
     * @return 返回判断的结果
     */
    public boolean isSymmetric(TreeNode root) {

        //调用递归方法
        return check(root, root);
    }

    //编写i递归方法判断二叉树的左右子树是否对称
    public boolean check(TreeNode p, TreeNode q) {
        //如果左右互为镜像的节点都为空,说明对称
        if (p == null && q == null) {
            return true;
        }
        //如果左右互为镜像的节点不都为空,说明不对称
        if (p == null || q == null) {
            return false;
        }
        //使用递归判断对称两节点的值是否相等
        //并判断左子树的左节点和右子树的右节点及左子树的右节点和右子树的左节点是否也对称
        return p.val == q.val && check(p.left, q.right) && check(p.right, q.left);
    }