Symmetric Tree
Thoughts
Code
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) {
return true;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
int length = queue.size();
TreeNode[] nodes = new TreeNode[length];
for (int i = 0; i < length; i++) {
TreeNode node = queue.remove();
nodes[i] = node;
if (node != null) {
queue.add(node.left);
queue.add(node.right);
}
}
for (int i = 0, j = length - 1; i < j; i++, j--) {
if (nodes[i] != null && nodes[j] != null && nodes[i].val != nodes[j].val ||
nodes[i] == null && nodes[i] != nodes[j] || nodes[j] == null && nodes[i] != nodes[j]) {
return false;
}
}
}
return true;
}
}
public class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) {
return true;
}
return isSymmHelper(root.left, root.right);
}
private boolean isSymmHelper(TreeNode node1, TreeNode node2) {
if (node1 == null) {
return node2 == null? true: false;
} else if (node2 == null) {
return false;
}
if (node1.val != node2.val) {
return false;
}
return isSymmHelper(node1.left, node2.right) &&
isSymmHelper(node1.right, node2.left);
}
}Analysis
Ver. 2
Last updated