给定一个二叉树,检查它是否是镜像对称的。
要判断是否对称,则需要判断根结点的左右子树是否对称,则分别比较两个结点的外侧和内侧。
主要分为三种情况:
//1、利用递归的方法
public static boolean compare(Node left, Node right) {
//1、左右结点是否为空的情况
if (left == null || right == null) {
return false;
}
//2、左右结点不为空 但值不相等
else if (left.val != right.val) {
return false;
}
//3、左右结点不为空,值也相等,递归判断左右结点
boolean outside = compare(left.left, right.right);
boolean inside = compare(left.right, right.left);
boolean flag = outside && inside;
return flag;
}
//迭代的方法实现 利用容器实现
public static boolean compare2(Node left,Node right) {
Queue<Node> queue = new ArrayDeque<>();
queue.add(left);
queue.add(right);
while (queue != null) {
Node leftNode = queue.poll();
Node rightNode = queue.poll();
if(leftNode==null && rightNode==null){
continue;
}
if(leftNode != null || rightNode!=null || rightNode.val!= leftNode.val){
return false;
}
queue.add(leftNode.left);
queue.add(rightNode.right);
queue.add(leftNode.right);
queue.add(rightNode.left);
}
return true;
}
原文:https://www.cnblogs.com/nj123/p/14614249.html