判断一个二叉树是不是对称二叉树

/**
*
* 思路 :对称二叉树是关于中间轴对称的
*
* 从根节点出发,判断根节点是不是对称的,假如根节点对称(左节点的值和右节点的值相等),
* 再判断左节点的左节点和右节点的右节点
* 左节点的右节点和右节点的左节点是不是对称的
*
* 本质是根据节点去找镜像点比较
*/

 

/**
 * 
    *   思路  :对称二叉树是关于中间轴对称的
 *   
    *   从根节点出发,判断根节点是不是对称的,假如根节点对称(左节点的值和右节点的值相等),
    *   再判断左节点的左节点和右节点的右节点
    *   左节点的右节点和右节点的左节点是不是对称的
 *  
    *    本质是 根据节点去找镜像点比较
 */
public class TreeSymmetric {

    public static boolean isSymmetric(TreeNode root) {
        if (root == null)
            return true;
        return isMirror(root.left, root.right);
    }

    public static boolean isMirror(TreeNode left , TreeNode right) {
        if (left == null && right == null)
            return true; // 两个都是null
        if (left == null || right == null)
            return false; // 有一个是null
        return left.val == right.val && isMirror(left.left, right.right) && isMirror(left.right, right.left); //递归
    }

    public static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) {
            val = x;
        }
    }

    public static void main(String[] args) {
        TreeNode root = new TreeNode(20);
        root.left = new TreeNode(21);
        root.right = new TreeNode(21);
        root.left.left = new TreeNode(15);
        root.right.right = new TreeNode(15);
        root.left.right = null;
        root.right.left = null;
        System.out.println(isSymmetric(root));
        
    }

}

 

posted @ 2019-06-21 18:17  踏月而来  阅读(2083)  评论(0编辑  收藏  举报