题目
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
思路
首先根节点以及其左右子树,左子树的左子树和右子树的右子树相同、左子树的右子树和右子树的左子树相同即可,采用递归。
代码
public class SymmetricalBinaryTree {
public static boolean issymmetrical(BinaryTreeNode root) {
if(root==null)
return true;
return issymmetricalcore(root.left,root.right);
}
public static boolean issymmetricalcore(BinaryTreeNode root1,BinaryTreeNode root2) {
if(root1==null && root2==null) {return true;}
if(root1==null||root2==null) {return false;}
return root1.val==root2.val && issymmetricalcore(root1.left,root2.right) && issymmetricalcore(root1.right,root2.left);
}
public static void main(String[] args) {
BinaryTreeNode root = new BinaryTreeNode(8);
BinaryTreeNode node1 = new BinaryTreeNode(6);
BinaryTreeNode node2 = new BinaryTreeNode(6);
BinaryTreeNode node3 = new BinaryTreeNode(5);
BinaryTreeNode node4 = new BinaryTreeNode(7);
BinaryTreeNode node5 = new BinaryTreeNode(7);
BinaryTreeNode node6 = new BinaryTreeNode(5);
root.left=node1;
root.right=node2;
node1.left=node3;
node1.right=node4;
node2.left=node5;
node2.right=node6;
boolean result=issymmetrical(root);
System.out.println(result);
}
}