相同题目:剑指58.对称的二叉树
☆☆☆☆方法1:递归。总体思路是判断两个子树相反位置上的值是否相等。
☆☆☆☆方法2:迭代。
需要注意:如果二叉树所有节点值都相等,但结构不同仍然不对称,因此需要把节点是 null 的情况考虑进来。
class Solution { public boolean isSymmetric(TreeNode root) { /** * 方法1:递归 */ if (root == null) return true; return isEqual(root.left, root.right); /** * 方法2:迭代 */ /* if (root == null) return true; Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root.left); queue.offer(root.right); while (!queue.isEmpty()) { TreeNode cur1 = queue.poll(); TreeNode cur2 = queue.poll(); // 注意需要把节点是null的情况考虑进来,排除节点值相等但结构不相等的情况 if (cur1 == null && cur2 == null) continue; // 注意是continue,接着判断后面的节点 if (cur1 == null || cur2 == null) return false; if (cur1.val != cur2.val) return false; queue.offer(cur1.left); queue.offer(cur2.right); queue.offer(cur1.right); queue.offer(cur2.left); } return true; */ } private boolean isEqual(TreeNode node1, TreeNode node2) { if (node1 == null && node2 == null) return true; if (node1 == null || node2 == null) return false; if (node1.val != node2.val) return false; return isEqual(node1.left,node2.right) && isEqual(node1.right,node2.left); } }