解题思路:
1.非递归
(1)如果root为空,则直接返回true;
(2)创建一个队列,将root的左节点入队,在让root的右节点入队
(3) 当队列不为空,循环
每次出队两个节点分别赋值为left,right:如果两个节点都为空,则继续,
如果有一个为空,则返回false
如果两个节点的值不同,则返回false
依次将left的左节点和right的右节点 、left的右节点和right的左节点入队
(4)返回true
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root==null){
return true;
}
Queue<TreeNode> queue=new LinkedList<>();
queue.add(root.left);
queue.add(root.right);
while(!queue.isEmpty()){
TreeNode left=queue.poll();
TreeNode right=queue.poll();
if(left==null && right==null){
continue;
}
if(left==null || right==null){
return false;
}
if(left.val!=right.val){
return false;
}
queue.add(left.left);
queue.add(right.right);
queue.add(left.right);
queue.add(right.left);
}
return true;
}
}