import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pRoot TreeNode类 * @return bool布尔型 */ public boolean isSymmetrical (TreeNode pRoot) { // write code here // 思路1: // 判断二叉数是否对称,可以通过层序遍历, // 然后看每层的元素是否满足 get(i) == get(length-i-1) // ArrayList<ArrayList<Integer>> arrayList = new ArrayList<>(); // Queue<TreeNode> queue = new LinkedList<>(); // queue.offer(pRoot); // while (!queue.isEmpty()) { // ArrayList<Integer> list = new ArrayList<>(); // arrayList.add(list); // int size = queue.size(); // for (int i = 0; i < size; i++) { // TreeNode node = queue.poll(); // if (node == null) { // list.add(0); // continue; // } // list.add(node.val); // queue.offer(node.left); // queue.offer(node.right); // } // } // for (int j = 0; j < arrayList.size(); j++) { // List<Integer> h = arrayList.get(j); // for (int c = 0; c < h.size() / 2; c++) { // if (!Objects.equals(h.get(c), h.get( h.size() - c - 1))) { // return false; // } // } // } // return true; // 思路2: // 如果一个树是对称二叉树,那必定存在根节点的左子树等于右子树 // 左节点的 左子树等于右节点的右子树,左节点的右子树等于右节点的左子树 return duiChen( pRoot, pRoot); } private boolean duiChen(TreeNode n1, TreeNode n2) { if (n1 == null && n2 == null) { return true; } if (n1 == null || n2 == null || n1.val != n2.val) { return false; } return duiChen(n1.left, n2.right) && duiChen(n1.right, n2.left); } }