101 - Symmetric Tree
Written on November 11, 2015
Tweet
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
public class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
return helper(root, root);
}
public boolean helper(TreeNode a, TreeNode b) {
if (a == null && b == null) return true;
if (a == null || b == null) return false;
return a.val == b.val && helper(a.left, b.right) && helper(a.right, b.left);
}
}
public class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
Queue<treenode> q1 = new LinkedList<treenode>();
Queue<treenode> q2 = new LinkedList<treenode>();
q1.offer(root);
q2.offer(root);
while (!q1.isEmpty() && !q2.isEmpty()) {
TreeNode left = q1.poll();
TreeNode right = q2.poll();
if (left == null && right == null) continue;
if (left == null || right == null || left.val != right.val) return false;
q1.offer(left.left);
q1.offer(left.right);
q2.offer(right.right);
q2.offer(right.left);
}
return q1.size() == q2.size();
}
}
class Solution(object):
def isSymmetric(self, root):
return self.helper(root, root)
def helper(self, left, right):
if not left or not right:
return left == right
return left.val == right.val and self.helper(left.left, right.right) and self.helper(left.right, right.left)
class Solution:
def isSymmetric(self, root):
q1, q2 = [root], [root]
while q1 and q2:
left = q1.pop(0)
right = q2.pop(0)
if not left and not right:
continue
if not left or not right or left.val != right.val:
return False
q1.append(left.left)
q1.append(left.right)
q2.append(right.right)
q2.append(right.left)
return not q1 and not q2