1. 程式人生 > 程式設計 >java 對稱二叉樹的判斷

java 對稱二叉樹的判斷

1. 題目描述

請實現一個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。

2. 解題思路

可以按照類似層次遍歷,來判斷是否是堆成二叉樹:
首先根節點以及其左右子樹,左子樹的左子樹和右子樹的右子樹相同,以及左子樹的右子樹和右子樹的左子樹相同即可,然後採用遞迴一直判斷下去。

3. 程式碼

public class isSymmetrical {

 public static void main(String[] args) {
 // 新建一棵二叉搜尋樹
 TreeNode root=new TreeNode(10);
 TreeNode n1=new TreeNode(5);
 TreeNode n2=new TreeNode(5);
 TreeNode n3=new TreeNode(4);
 TreeNode n4=new TreeNode(7);
 TreeNode n5=new TreeNode(7);
 TreeNode n6=new TreeNode(4);
 //TreeNode n7=new TreeNode(19);
 root.left=n1;
 root.right=n2;
 n1.left=n3;
 n1.right=n4;
 n2.left=n5;
 n2.right=n6;
 //n6.right=n7;
 
 System.out.println("後序遍歷:");
 postOrderTraverse(root);
 
 boolean temp=symmetrical(root);
 System.out.println("\n"+"結果:"+temp);
 }
 
 
 static boolean symmetrical(TreeNode pRoot)
  {
 if(pRoot == null){
      return true;
    }
    return comRoot(pRoot.left,pRoot.right);
  }
 
 
  static boolean comRoot(TreeNode left,TreeNode right) {
    if(left == null) 
     return right==null;
    if(right == null) 
     return false;
    if(left.val != right.val) 
     return false;
    return comRoot(left.right,right.left) && comRoot(left.left,right.right);
  }
  
  // 後序遍歷
  public static void postOrderTraverse(TreeNode node) { 
    if (node == null) 
      return; 
    postOrderTraverse(node.left); 
    postOrderTraverse(node.right); 
    System.out.print(node.val + " "); 
  }
}

執行:

後序遍歷:
4 7 5 7 4 5 10
結果:true

到此這篇關於java 對稱二叉樹的判斷的文章就介紹到這了,更多相關java 對稱二叉樹內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!