26、判断二叉树是否为对称的二叉树——剑指offer

判断二叉树是否为对称的二叉树

问题描述:判断二叉树是否为对称的二叉树,如果一棵二叉树和其镜像二叉树一样,那么它就是对称的


    首先考察基本功,二叉树镜像、前序遍历等,我们可以写一个镜像二叉树的函数,然后判断两棵二叉树是否一样,如果一样则说明正确,二叉树镜像的函数在上一篇写过了,这里不赘述了,这里采用一种特殊的遍历方法的方法

    本方法思想:定义一个前序遍历和对称的前序遍历方法,如果遍历结果一样则对称(要考虑到空指针。。),不考虑空指针会出错,比如一个树是7.left=7;另一个是7.right=7,无论怎么遍历结果都一样,如果考虑空指针则可以正确判断

持续更新...

代码附下

Java实现:

package 判断二叉树是否对称;
/**
 * 如果一个二叉树和它的镜像一样,就是对称二叉树
 * @author user
 *思路1:将二叉树镜像
 *思路2:定义一个前序遍历和对称的前序遍历方法
 *如果遍历结果一样则对称(要考虑到空指针。。)
 *不考虑空指针会出错,比如一个树是7.left=7;另一个是7.right=7
 *无论怎么遍历结果都一样
 */

二叉树的数据结构:

public class BinaryTree {
    int val;
    BinaryTree left = null;
    BinaryTree right = null;
    public BinaryTree(int val) {
        this.val = val;
    }
}

public class Test {
    public static boolean isSymmetrical(BinaryTree root1, BinaryTree root2) {
        if (root1 == null && root2 == null) {
            return true;
        }
        if (root1 == null || root2 == null) {
            return false;
        }
        if (root1.val != root2.val) {
            return false;
        }
        //判断A的左边和B的右边是否相等,判断A的右边和B的左边是否相等,都相等就满足
        return isSymmetrical(root1.left, root2.right) && isSymmetrical(root1.right, root2.left);
    }

    public static void main(String[] args) {
        BinaryTree rootA = new BinaryTree(8);
        rootA.left = new BinaryTree(9);
        rootA.right = new BinaryTree(9);
        // rootA.left.left=new BinaryTree(9);
        // rootA.left.right=new BinaryTree(2);
        // rootA.left.right.left=new BinaryTree(4);
        // rootA.left.right.right=new BinaryTree(7);
        System.out.println(isSymmetrical(rootA, rootA));//测试

    }
}

持续更新...欢迎赞赏!

主页:https://blog.csdn.net/ustcer_93lk/article/details/80374008

如果有问题,欢迎大家留言,有更好的方法也期待大家告知。

猜你喜欢

转载自blog.csdn.net/ustcer_93lk/article/details/80373736
今日推荐