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;}
}