1. 程式人生 > >對稱的二叉樹 java實現

對稱的二叉樹 java實現

題目描述:

請實現一個函式,用來判斷一棵二叉樹是不是對稱的,如果一棵二叉樹和他的映象是一樣的,那麼它是對稱的;

解題思路:首先 理解映象的概念,進行就是一棵二叉樹左右節點反轉過後形成的二叉樹和原來的二叉樹是一樣的。這道題目中判斷條件是使用和元二叉樹的映象相同,那麼最low的方法是對原二叉樹進行重構,重構後的二叉樹和原二叉樹進行比較,相同即是對稱,不同就是不對稱嘍。那麼這種方法需要額外空間的,我覺得不是很好。下面來說說我的想法:其實判斷映象的過程可以簡化成這樣:看下面的圖,原來的二叉樹是左邊的圖,其映象二叉樹就是右邊的圖,可以看出就是對左右兩個字數進行的翻轉,那麼判斷一棵二叉樹是否對稱就變成了,將原二叉樹用兩個變數引用,比如說root1,root2,先判斷這兩棵樹的根節點是否相同,不相同肯定不是對稱的,相同的話繼續比較,root1的左子樹和root2的右子樹以及root1的右子樹和root2的左子樹,具體程式碼如下:


public class Solution {
    boolean isSymmetrical(TreeNode pRoot)
    {
        return getResult(pRoot,pRoot);
    }
    boolean getResult(TreeNode pRoot,TreeNode Root) {
        if (pRoot == null && Root == null) return true;
        if (pRoot == null || Root == null) return false;
        if(pRoot.val != Root.val) {
            return false;
        }
        return (getResult(pRoot.left,Root.right)&&getResult(pRoot.right,Root.left));
    }
}