Solution 1. recursively
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public boolean isSymmetric(TreeNode root) { if (root == null) { return true; } return isSame(root.left, root.right); } public boolean isSame(TreeNode left, TreeNode right) { if (left == null && right == null) { return true; } if (left == null || right == null) { return false; } return left.val == right.val && isSame(left.left, right.right) && isSame(left.right, right.left); } } iteratively /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public boolean isSymmetric(TreeNode root) { if (root == null) { return true; } Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root.left); queue.offer(root.right); while (!queue.isEmpty()) { TreeNode left = queue.poll(); TreeNode right = queue.poll(); if (left == null && right == null) { continue; } if (left == null || right == null || left.val != right.val) { return false; } queue.offer(left.left); queue.offer(right.right); queue.offer(left.right); queue.offer(right.left); } return true; } }Problem#1 1. 代码结构不清晰 * 对于null条件的判断条理不清晰,应当把可以直接返回值的条件放在前面 * 返回true or false时可以用&&把各种结果合并成一句话 2. 对于迭代代码的写法没有清晰的思路
