题目描述
给你一个二叉树的根节点 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
**进阶:**你可以运用递归和迭代两种方法解决这个问题吗?
代码
使用递归法:
java
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isSame(TreeNode left, TreeNode right){
if(left == null || right == null) return left==right;
// 这一层的左右 && 下一层的外侧 && 下一层的里侧
return left.val == right.val && isSame(left.left, right.right) && isSame(left.right, right.left);
}
public boolean isSymmetric(TreeNode root) {
// 使用递归法
if(root == null) return true;
return isSame(root.left, root.right);
}
}
借助列表,层序遍历:
java
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
List<TreeNode> que = new LinkedList<>();
if(root.left == null && root.right == null) return true;
que.add(root);
while(!que.isEmpty()){
int size = que.size();
// 先做比较
for(int i=0; i<size/2; i++){
TreeNode pre = que.get(i);
TreeNode last = que.get(size-i-1);
if(pre == last) continue;
if(pre == null || last == null || pre.val != last.val) return false;
}
// 再新增子节点 null也要
for(int i=0; i<size; i++){
TreeNode node = que.remove(0);
if(node != null){
que.add(node.left);
que.add(node.right);
}
}
}
return true;
}
}