简单算法 判断二叉树是否对称 (java)
描述
给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)
例如:下面这棵二叉树是对称的
1
/
2 2
/ \ /
3 4 4 3
下面这棵二叉树不对称。
1
/
2 2
\
3 3
备注:
希望你可以用递归和迭代两种方法解决这个问题
想法:迭代和递归
代码1:(迭代)
public boolean isSymmetric (TreeNode root) {
if(root == null) return true;
Stack<TreeNode> s1 = new Stack<>();
s1.push(root.left);
s1.push(root.right);
while(!s1.empty()){
TreeNode right = s1.pop();
TreeNode left = s1.pop();
if(right == null && left == null) continue;
if(left != null || right != null){
if(left == null) return false;
if(right == null) return false;
if(left.val != right.val )
return false;
}
s1.push(left.left);
s1.push(right.right);
s1.push(left.right);
s1.push(right.left);
}
return true;
}
代码2:(递归)
public boolean isSymmetric (TreeNode root) {
if(root == null) return true;
return compaer(root.left,root.right);
}
public boolean compaer(TreeNode left ,TreeNode right){
if(left == null && right == null) return true;
if(left != null || right != null){
if(left == null) return false;
if(right == null) return false;
if(left.val != right.val) return false;
}
boolean compaer1 = compaer(left.left,right.right);
boolean compaer2 = compaer(left.right,right.left);
boolean result = compaer1 && compaer2;
return result;
}