剑指Offer面试题59:对称二叉树 Java实现

题目:对称二叉树
          请实现一个函数,用来判断一颗二叉树是不是对称的。如果一颗二叉树和它的镜像一样,那么它是对称的。
算法分析:
 
如上图所示,图(1)位一颗对称二叉树,图(2)和图(3)都不是对称二叉树
算法描述:
见程序

算法源程序:
/**************************************************************      
* 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));
	}
}

程序运行结果:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章