Fork me on GitHub

【Offer】[28] 【对称的二叉树】

题目描述

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

牛客网刷题地址

思路分析

  利用前序遍历(根-左-右)和对称器前序遍历(根-右-左),查看两个的遍历序列是否相同,如果出现二叉树中全是同一节点的情况,我们可以讲null也添加到遍历序列中比较。
  利用递归的方法,在遍历的过程中比较他们的值是否相同,包括空指针。

测试用例

  1. 功能测试:对称的二叉树;因结构而不对称的二叉树;结构对称但节点的值不对称的二叉树。
  2. 特殊输入测试:二叉树的根节点为nullptr 指针;只有一个节点的
    二叉树;所有节点的值都相同的二叉树。

Java代码

public class Offer28 {
    public static void main(String[] args) {
        test1();
        test2();
        test3();

    }

    public static boolean isSymmertrical(TreeNode pRoot) {
        return Solution1(pRoot);
    }

    private static boolean Solution1(TreeNode pRoot) {
        return isSymmertrical(pRoot, pRoot);
    }

    private static boolean isSymmertrical(TreeNode pRoot1, TreeNode pRoot2) {
        if (pRoot1 == null && pRoot2 == null) {
            return true;
        }
        if (pRoot1 == null || pRoot2 == null) {
            return false;
        }
        if (pRoot1.val != pRoot2.val) {
            return false;
        }
        return isSymmertrical(pRoot1.left, pRoot2.right) 
                && isSymmertrical(pRoot1.right, pRoot2.left);
    }
    private static void test1() {
    }

    private static void test2() {
    }
    private static void test3() {
    }
}

代码链接

剑指Offer代码-Java

posted @ 2019-08-12 15:41  这个世界~  阅读(97)  评论(0编辑  收藏  举报