题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
/**
* 对称的二叉树
*
* @author 过路的守望
*
*/
public class SymmetricalTree {
public boolean isSymmetricalTree(TreeNode pRoot) {
if (pRoot == null) {
return true;
}
TreeNode root = pRoot;
TreeNode mirror = pRoot;
return isSymmetricalTreeRec(root, mirror);
}
/**
* root与mirror都指向同一颗二叉树
* @param root
* @param mirror
* @return
*/
public boolean isSymmetricalTreeRec(TreeNode root, TreeNode mirror) {
/*
* 若两者都为空,对称返回true。
*/
if (root == null && mirror == null) {
return true;
}
/*
* 若两者中只有一者为空,显然不对称,返回false。
*/
if (root == null || mirror == null) {
return false;
}
/*
* 若两者都不为空,则比较两者的值是否相等。
*/
if (root.val != mirror.val) {
return false;
}
/*
* 两者值相等,则递归比较子树是否对称
*/
return isSymmetricalTreeRec(root.left, mirror.right)
&& isSymmetricalTreeRec(root.right, mirror.left);
}
/*
* 二叉树内部类
*/
private static class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
}