101. 对称二叉树
给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3] 输出:false
提示:
- 树中节点数目在范围
[1, 1000]
内 -100 <= Node.val <= 100
进阶:你可以运用递归和迭代两种方法解决这个问题吗?
1、递归
class Solution {
public boolean isSymmetric(TreeNode root) {
return check(root.left,root.right);
}
public boolean check(TreeNode a,TreeNode b){
if(a==null||b==null)return a==b;//遍历到null时返回
//比较当前左右节点的值,并且判断是否对称
return a.val == b.val && check(a.left,b.right) && check(a.right,b.left);
}
}
2、迭代
class Solution {
public boolean isSymmetric(TreeNode root) {
return check(root,root);
}
public boolean check(TreeNode a,TreeNode b){
Queue<TreeNode> que = new LinkedList<>();
que.add(a);
que.add(b);
while(!que.isEmpty()){
TreeNode p = que.poll();
TreeNode q = que.poll();
if(p==null&&q==null)continue;
if(p==null||q==null||p.val!=q.val){
return false;//不对称
}
que.add(p.left);//比较左树的左孩子,右树的右孩子
que.add(q.right);
que.add(p.right);//比较左树的右孩子,右树的左孩子
que.add(q.left);
}
return true;
}
}