标题:101对称二叉树-简单
题目
给定一个二叉树,检查它是否是镜像对称的
示例1
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
示例2
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
要求
你可以运用递归和迭代两种方法解决这个问题吗?
代码Java
// 非递归,迭代栈
public boolean isSymmetric(TreeNode root) {
if(root == null)
return true;
TreeNode l = root.left;
TreeNode r = root.right;
Stack<TreeNode> sl = new Stack<>();
Stack<TreeNode> sr = new Stack<>();
int flag = 0;
while (l != null || r != null || !sl.empty() || !sr.empty()) {
if (l != null && r != null) {
if (l.val != r.val) {
return false;
} else {
sl.push(l);
sr.push(r);
l = l.left;
r = r.right;
}
} else if (l == null && r == null) {
l = sl.pop();
l = l.right;
r = sr.pop();
r = r.left;
} else {
return false;
}
}
return true;
}
/*
递归
public boolean isSymmetric(TreeNode root) {
if(root == null) return true;
return treeSymm(root.left, root.right);
}
public static boolean treeSymm(TreeNode l, TreeNode r) {
if(l == null && r == null)
return true;
if(l==null && r!=null)
return false;
if(l != null && r == null)
return false;
if(l.val != r.val)
return false;
return (treeSymm(l.left, r.right) && treeSymm(l.right, r.left));
}
*/