101. 对称二叉树
101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
思路
要判断是否对称,则需要判断根结点的左右子树是否对称,则分别比较两个结点的外侧和内侧。
主要分为三种情况:
- 当左右子树的结点有一个为空,则不对称;都为空时,则对称;
- 当左右子树都不为空时,左右结点的值不相等,则不对称
- 当左右子树均不为空时,左右结点的值相等,则向下判断下面的各自的左右子树。
代码
//1、利用递归的方法
public static boolean compare(Node left, Node right) {
//左右结点是否为空的情况
if(left == null && right == null){
return true;
}
if (left == null || right == null) {
return false;
}
//2、左右结点不为空 但值不相等
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.isempty() {
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;
}

浙公网安备 33010602011771号