题目描述
AC代码
迭代做法:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
/*迭代做法*/
public boolean isSymmetric(TreeNode root) {
if(root==null)
return true;
Stack<TreeNode> l=new Stack<>();
Stack<TreeNode> r=new Stack<>();
TreeNode p=root.left,q=root.right;
while(!l.empty()||!r.empty()||q!=null||p!=null){
while(p!=null&&q!=null){
l.push(p);p=p.left;
r.push(q);q=q.right;
}
if((q==null&&p!=null)||(q!=null&&p==null))
return false;
p=l.peek();l.pop();
q=r.peek();r.pop();
if(q.val!=p.val)
return false;
p=p.right;
q=q.left;
}
return true;
}
}
递归做法:
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root==null)
return true;
return dfs(root.left,root.right);
}
boolean dfs(TreeNode l,TreeNode r){
if(l==null||r==null)
return (l==null)&&(r==null);
if(l.val!=r.val)
return false;
return dfs(l.left,r.right)&&dfs(l.right,r.left);
}
}