/**************************************************************
* 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));
}
}
程序運行結果: