实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和他的镜像一样,那么它是对称的。、
思路1:可以仿照二叉树的镜像,先找出该二叉树的镜像,再和原二叉树比较。
思路2:我们可以定义一种对称前序遍历算法,即先遍历父节点,再遍历右、左节点。假如前序遍历得到的序列和对称前序遍历得到的相同,那么该二叉树就是对称的。
public class Test {
public static boolean isSymmetrical(BinaryTree root1, BinaryTree root2) {
if (root1 == null && root2 == null) {
return true;
}
else if (root1 == null || root2 == null) {
return false;
}
else if (root1.val != root2.val) {
return false;
}
//判断A的左边和B的右边是否相等,判断A的右边和B的左边是否相等,都相等就满足(递归)
return isSymmetrical(root1.left, root2.right) && isSymmetrical(root1.right, root2.left);
}
public static void main(String[] args) {
BinaryTree rootA = new BinaryTree(8);
rootA.left = new BinaryTree(9);
rootA.right = new BinaryTree(9);
// rootA.left.left=new BinaryTree(9);
// rootA.left.right=new BinaryTree(2);
// rootA.left.right.left=new BinaryTree(4);
// rootA.left.right.right=new BinaryTree(7);
System.out.println(isSymmetrical(rootA, rootA));//测试
}
}