1. 程式人生 > 其它 >Leetcode-101.對稱二叉樹

Leetcode-101.對稱二叉樹

技術標籤:刷題leetcode

對稱二叉樹–遞迴實現

在這裡插入圖片描述
首先考慮對稱二叉樹最簡單的性質----一個結點的左右子樹的值相等
看起來非常直觀,但我們還要考慮空結點的情況
如下圖

在這裡插入圖片描述
因為是對稱的二叉樹,我們需要比較的點是
①左結點的左子樹和右結點的右子樹的值是否相等
②左節點的右子樹和右結點的左子樹的值是否相等

然後開始解題吧

遞迴實現
安全性的檢查
        if(root == null){
            return true;
        }
根節點為空自然是對稱的,所以返回true

列舉對稱的情況:
左右子樹相等(都為空 返回true
注意左右子樹判空的順序,先進行判空再判斷值是否相等,不然會丟擲異常

最後列舉上述提到的判斷是否對稱的條件就可以了

    public boolean isEqual(TreeNode L, TreeNode R) {
        if(L == null && R == null){
            return true;
        }
        if(L == null || R == null || L.val != R.val){
            return false;
        }
        return isEqual(L.left,L.right) && isEqual(R.left, R.right);
    }

以下為全程式碼

    public boolean isSymmetric(TreeNode root){
        if(root == null){
            return true;
        }
        return isEqual(root.left,root.right);
    }

    public boolean isEqual(TreeNode L, TreeNode R) {
        if(L == null && R == null){
            return true;
        }
        if(L.val != R.val || L == null || R == null){
            return false;
        }
        return isEqual(L.left,L.right) && isEqual(R.left, R.right);
    }