劍指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));
	}
}

程序運行結果:


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