【剑指Offer】28.对称的二叉树

题目

给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)
例如:下面这棵二叉树是对称的
 

【剑指Offer】28.对称的二叉树_第1张图片

下面这棵二叉树不对称。

【剑指Offer】28.对称的二叉树_第2张图片

数据范围:节点数满足 0≤n≤1000,节点上的值满足 0∣val∣≤1000

要求:空间复杂度 O(n),时间复杂度 O(n)

备注:你可以用递归和迭代两种方法解决这个问题

示例1

输入:{1,2,2,3,4,4,3}

返回值:true

示例2

输入:{8,6,9,5,7,7,5}

返回值:false

解答

源代码

import java.util.*;

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

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return bool布尔型
     */
    public boolean isSymmetrical (TreeNode pRoot) {
        // write code here
        if (pRoot == null) {
            return true;
        }

        return func(pRoot.left, pRoot.right);
    }

    public boolean func(TreeNode nodeA, TreeNode nodeB) {
        if (nodeA == null && nodeB == null) {
            return true;
        } else if (nodeA == null || nodeB == null || nodeA.val != nodeB.val) {
            return false;
        }

        return func(nodeA.left, nodeB.right) && func(nodeA.right, nodeB.left);
    }
}

总结

这题可以用递归做可以用迭代,重点在于将哪些结点两两对比,对比的依据是什么。

你可能感兴趣的:(剑指Offer,java,算法)