题目描述
方法思路
Approach1: iterative
class Solution{
//Runtime: 5 ms, faster than 100.00%
//Memory Usage: 39 MB, less than 30.40%
public boolean isSymmetric(TreeNode root) {
Queue<TreeNode> q = new LinkedList<TreeNode>();
if(root == null) return true;
q.add(root.left);
q.add(root.right);
while(q.size() > 0){
TreeNode left = q.poll(), right = q.poll();
if(left== null && right == null) continue;
if(left == null || right == null) return false;
if(left.val != right.val) return false;
q.add(left.left);
q.add(right.right);
q.add(left.right);
q.add(right.left);
}
return true;
}
}
Approach2: recursive
class Solution{
//Memory Usage: 39.5 MB, less than 15.45%
//Runtime: 5 ms, faster than 100.00%
public boolean isSymmetric(TreeNode root) {
return isMirror(root, root);
}
public boolean isMirror(TreeNode t1, TreeNode t2) {
if (t1 == null && t2 == null) return true;
if (t1 == null || t2 == null) return false;
return (t1.val == t2.val)
&& isMirror(t1.right, t2.left)
&& isMirror(t1.left, t2.right);
}
}