publicboolean(TreeNode root){ if (root == null) returntrue; LinkedList<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { int size = queue.size(); for (int i = 0; i < size; i++) { TreeNode p = queue.poll(); if (p == null) continue; queue.offer(p.left); queue.offer(p.right); } LinkedList<TreeNode> tmp = new LinkedList<>(queue); while (!tmp.isEmpty()) { TreeNode first = tmp.pollFirst(); TreeNode last = tmp.pollLast(); if (first == null || last == null) { if (first != null) returnfalse; if (last != null) returnfalse; continue; } if (first.val != last.val) returnfalse; } } returntrue; }
算法2: 判断每一个节点的左右子节点是否对称,然后递归判断,Leetcode 15ms:
1 2 3 4 5 6 7 8 9
publicbooleanisSymmetric02(TreeNode root){ if (root == null) returntrue; return helper(root.left, root.right); } publicbooleanhelper(TreeNode left, TreeNode right){ if (left == null) return right == null; if (right == null) returnfalse; return left.val == right.val && helper(left.left, right.right) && helper(left.right, right.left); }
近期评论