剑指offer第58题“对称的二叉树”

最后第九题

Posted by Cfeng on April 5, 2019

对称的二叉树

题目描述

请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 ***

思路

一般要把树每一个点都要判断的题,就会想到递归,想到递归就要新定义一个方法。 判断是否对称。那么根结点A的左儿子B与右儿子C值相等,然后要比较B左与C右和B右与C左,都想等了就能判定BC相等。 接着就要判断B左左与C右右,B左右与C右左,这能判断B左与C右的情况。 另一边要判断B右左与C左右,B右右与C左左,这能判断B右与C左的情况。

发现规律,要判断两点相等,首先值要相等,然后判断B左与C右和B右与C左即可,找到要递归的东西了。

Java实现

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    boolean isSymmetrical(TreeNode pRoot)
    {
        if(pRoot==null){
            return true;
        }
        return eql(pRoot.left,pRoot.right);
    }
    boolean eql(TreeNode left,TreeNode right){
        if(left==null&&right==null){
            return true;
        }
        if(left==null || right==null || left.val!=right.val){
            return false;
        }
        return (eql(left.left,right.right)&&eql(left.right,right.left));
    }
}