问题描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
练习地址
实现
/**28 对称的二叉树*/
public class C28_tree_Symmetrical {
static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
static boolean isSymmetrical(TreeNode root){
if(root == null) return true;
return isSymmetrical(root,root);
}
//比较前序遍历和对称前序遍历
static boolean isSymmetrical(TreeNode root1, TreeNode root2){
if(root1==null&&root2==null)return true;
if(root1==null||root2==null)return false;
if(root1.val!=root2.val)return false;
return isSymmetrical(root1.left,root2.right)
&&isSymmetrical(root1.right,root2.left);
}
}
Test
public static void main(String[] args) {
TreeNode root1 = new TreeNode(8);
TreeNode node2 = new TreeNode(6);
TreeNode node3 = new TreeNode(6);
TreeNode node4 = new TreeNode(5);
TreeNode node5 = new TreeNode(7);
TreeNode node6 = new TreeNode(7);
TreeNode node7 = new TreeNode(5);
root1.left = node2;
root1.right = node3;
node2.left = node4;
node2.right = node5;
node3.left = node6;
node3.right = node7;
System.out.println(isSymmetrical(root1));
}