/**************************************************************
* Copyright (c) 2016,
* All rights reserved.
* 版 本 号:v1.0
* 题目描述:对称二叉树
* 请实现一个函数,用来判断一颗二叉树是不是对称的。如果一颗二叉树和它的镜像一样,那么它是对称的。
* 输入描述:无
* 程序输出:该二叉树是否为对称二叉树
* true
* 问题分析: 无
* 算法描述:通过递归函数,来判断一颗树的左右节点是否成镜像
* 完成日期:2016-10-14
***************************************************************/
package org.marsguo.offerproject59;
class TreeNode{
int val;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val){
this.val = val;
}
}
class IsSymmetrical{
public boolean isSymmetricalFun(TreeNode root){
return isSymmetricalFun(root,root);
}
public boolean isSymmetricalFun(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 isSymmetricalFun(root1.left,root2.right)&&isSymmetricalFun(root1.right, root2.left); //对称成镜像
}
}
public class SymmetricalTree {
public static void main(String[] args){
IsSymmetrical issymmetrical = new IsSymmetrical();
TreeNode n1 = new TreeNode(8);
TreeNode n2 = new TreeNode(6);
TreeNode n3 = new TreeNode(6);
TreeNode n4 = new TreeNode(5);
TreeNode n5 = new TreeNode(7);
TreeNode n6 = new TreeNode(7);
TreeNode n7 = new TreeNode(5);
// TreeNode n8 = new TreeNode(8);
// TreeNode n9 = new TreeNode(9);
n1.left = n2;
n1.right = n3;
n2.left = n4;
n2.right = n5;
n3.left = n6;
n3.right = n7;
// n5.left = n8;
// n5.right = n9;
System.out.println("该二叉树是否为对称二叉树");
System.out.println(issymmetrical.isSymmetricalFun(n1));
}
}
程序运行结果: