劍指offerNo58. 對稱的二叉樹(Java)

題目描述:

請實現一個函數,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其爲對稱的。

思路:

示例

示例圖是對稱的。(左代表左孩子,右代表右孩子) 節點1的左與右; 節點1的左左與右右;節點1的左右與右左。可以看出作鏡像的位置是相反的。

代碼:

package offer01;

import offer.TestNo2;

public class TestNo58 {
    static class TreeNode{
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
        TreeNode(int val){
            this.val = val;
        }
    }
    public static void main(String[] args) {
        TreeNode node1 = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(2);
        TreeNode node4 = new TreeNode(3);
        TreeNode node5 = new TreeNode(4);
        TreeNode node6 = new TreeNode(4);
        TreeNode node7 = new TreeNode(3);
        node1.left = node2;
        node1.right = node3;
        node2.left = node4;
        node2.right = node5;
        node3.left = node6;
        node3.right = node7;
        System.out.println(new TestNo58().isSymmetrical(node1));
    }
    boolean isSymmetrical(TreeNode pRoot)
    {
        if(pRoot == null)
            return true;//根節點是null時,認爲是對稱二叉樹
        return isEqual(pRoot.left,pRoot.right);//判斷左右子樹
}
private boolean isEqual(TreeNode pRoot1,TreeNode pRoot2){
    if(pRoot1 == null && pRoot2 == null){
        return true;
    }
    if(pRoot1 == null || pRoot2 == null){
        return false;
    }
    return pRoot1.val == pRoot2.val
            && isEqual(pRoot1.left,pRoot2.right)
            && isEqual(pRoot1.right,pRoot2.left);
}
}

乾坤未定,你我皆黑馬  ..

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