题目
思路
dfs
- 值相等,且 left.left 对 right.right,left.right 对 right.left
bfs
成对入队,每次弹出两个节点比较
Java
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) {
return true;
}
return isMirror(root.left, root.right);
}
private boolean isMirror(TreeNode a, TreeNode b) {
if (a == null && b == null) {
return true;
}
if (a == null || b == null) {
return false;
}
if (a.val != b.val) return false;
return isMirror(a.left, b.right) && isMirror(a.right, b.left);
}
}
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
Deque<TreeNode> q = new LinkedList<>();
q.add(root.left);
q.add(root.right);
while (!q.isEmpty()) {
TreeNode a = q.poll();
TreeNode b = q.poll();
if (a == null && b == null) continue;
if (a == null || b == null) return false;
if (a.val != b.val) return false;
q.add(a.left);
q.add(b.right);
q.add(a.right);
q.add(b.left);
}
return true;
}
}