/* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ import java.util.* ; public class Solution { //使用二叉树的层序遍历,判断每一层的序列是否对称 boolean isSymmetrical(TreeNode pRoot) { if(pRoot == null) { return true ; } //这是空结点的 占位结点的值 int NULL_VAL = Integer.MIN_VALUE ; Queue<TreeNode> que = new LinkedList<>() ; TreeNode cur = pRoot ; que.offer(cur) ; while(!que.isEmpty()) { //每次都只处理一层,记录一下本层的节点个数(包括空节点) int len = que.size() ; //申请一个零时数组,用于存放每一层结点从左到右的值的序列 int[] temp = new int[len] ; int index = 0 ; //处理这一层 while(len > 0) { cur = que.poll() ; len--; temp[index++] = cur.val ; //如果从队列中刚取出来的节点是 不是空节点 ,才用将它的子节点再次加入队列 if(cur.val != NULL_VAL) { //分别判断左右节点 //如果结点为null则创建一个空节点,代替,并加入队列 if(cur.left == null) { que.offer(new TreeNode(NULL_VAL)) ; } else { que.offer(cur.left) ; } if(cur.right == null) { que.offer(new TreeNode(NULL_VAL)) ; } else { que.offer(cur.right) ; } } } //每层处理完成后,temp中存放的就是这层结点的值(从左到右) //只需要判断 这个数组是否对称即可 if(!isMirror(temp)) { return false ; } } return true ; } //判断数组元素是否对称 boolean isMirror(int[] temp) { int s = 0 ; int e = temp.length-1 ; while(e > s) { if(temp[s] != temp[e]) { return false ; } e -- ; s ++ ; } return true ; } }