给你一个二叉树的根节点 root , 检查它是否轴对称。
递归法
public boolean isSymmetric(TreeNode root) {
return check(root,root);
}
public boolean check(TreeNode p,TreeNode q){
if(p==null&&q==null){
return true;
}
if(p==null||q==null){
return false;
}
return p.val==q.val&&check(p.left,q.right )&&check(p.right,q.left );
}
递归法依次比较左子树的右节点和右子树的左节点,左子树的左节点和右子树的右节点,如果同时为null,代表还满足对称性,需要继续向下对比,一旦只有一方为null则不满足对称性,同时会比较节点值(不为null的前提下)。
迭代法:借助队列
public boolean isSymmetric(TreeNode root) {
return check(root,root);
}
public boolean check(TreeNode u,TreeNode v){
Queue<TreeNode> q= new LinkedList<>();
q.offer(u);
q.offer(v);
while (!q.isEmpty()){
u=q.poll();
v=q.poll();
if(u==null&&v==null){
continue;
}
if((u==null||v==null)||u.val!=v.val){
return false;
}
q.offer(u.left);
q.offer(v.right);
q.offer(u.right);
q.offer(v.left);
}
return true;
}