Symmetric Tree
Code link: https://leetcode.com/problems/symmetric-tree/
- Recursive solution
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) {
return true;
}
return isSymmetricHelper(root.left, root.right);
}
private boolean isSymmetricHelper(TreeNode lNode, TreeNode rNode) {
if (lNode == null && rNode == null) {
return true;
} else if ((lNode == null || rNode == null) || lNode.val != rNode.val) {
return false;
}
return isSymmetricHelper(lNode.left, rNode.right) && isSymmetricHelper(lNode.right, rNode.left);
}
}
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) {
return true;
}
return isSymmetricHelper(root.left, root.right);
}
private boolean isSymmetricHelper(TreeNode lNode, TreeNode rNode) {
if (lNode == null && rNode == null) {
return true;
} else if ((lNode == null || rNode == null) || lNode.val != rNode.val) {
return false;
}
return isSymmetricHelper(lNode.left, rNode.right) && isSymmetricHelper(lNode.right, rNode.left);
}
- Time: O(n)
- Space: O(n). The size of recursion stack could be equivalent to the number of nodes.
- Iterative solution using BFS
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) {
return true;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root.left);
queue.add(root.right);
while (!queue.isEmpty()) {
TreeNode lNode = queue.remove();
TreeNode rNode = queue.remove();
if (lNode == null && rNode == null) {
continue;
} else if ((lNode == null) ^ (rNode == null)) {
return false;
} else if (lNode.val != rNode.val) {
return false;
}
queue.add(lNode.left);
queue.add(rNode.right);
queue.add(lNode.right);
queue.add(rNode.left);
}
return true;
}
}
- Time: O(n);
- Space: O(n);
浙公网安备 33010602011771号