方法一:递归
class Solution { public boolean isSymmetric(TreeNode root) { if(root == null) return true; return isSame(root.left,root.right); } public boolean isSame(TreeNode l, TreeNode r) { if(l == null && r == null) return true; if(l == null || r == null) return false; if(l.val != r.val) return false; return isSame(l.left,r.right) && isSame(l.right,r.left); } }
方法二:迭代
class Solution { public boolean isSymmetric(TreeNode root) { if (root == null) { return true; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root.left); queue.offer(root.right); while (!queue.isEmpty()) { TreeNode node1 = queue.poll(); TreeNode node2 = queue.poll(); if (node1 == null && node2 == null) { continue; } if (node1 == null || node2 == null || node1.val != node2.val) { return false; } queue.offer(node1.left); queue.offer(node2.right); queue.offer(node1.right); queue.offer(node2.left); } return true; } }