101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
解析
使用递归和BFS两种方式解决
class Solution {
public boolean isSymmetric(TreeNode root) {
//递归,直接比较左右子树
return helper(root,root);
}
public boolean helper(TreeNode node1,TreeNode node2){
if(node1==null&&node2==null) return true;
if(node1==null||node2==null) return false;
return node1.val==node2.val && helper(node1.left,node2.right) && helper(node1.right,node2.left);
}
}
//迭代
class Solution {
public boolean isSymmetric(TreeNode root) {
//先层序遍历再弹出
LinkedList<TreeNode> queue = new LinkedList<>();
TreeNode head = root;
queue.add(head);
while(!queue.isEmpty()){
int size = queue.size();
int[] vals = new int[size];
for(int i = 0 ; i < size ; i ++){
head = queue.removeFirst();
if(head!=null){
queue.add(head.left);
queue.add(head.right);
vals[i] = head.val;
}else{
vals[i] = Integer.MAX_VALUE;
}
}
for(int i = 0 ; i < size/2;i++){
if(vals[i]!=vals[size-1-i]){
return false;
}
}
}
return true;
}
}
注意:本文归作者所有,未经作者允许,不得转载