1. 程式人生 > 其它 >LeetCode 0101 Symmetric Tree

LeetCode 0101 Symmetric Tree

原題傳送門

1. 題目描述

2. Solution

1、思路分析
如果一棵樹的左子樹與右子樹映象對稱,那麼這棵樹是對稱的。
因此,該問題可以轉化為:兩個樹在什麼情況下互為映象?
如果同時滿足下面的條件,兩棵樹互為映象:
1> 它們的兩個根結點具有相同的值;
2> 每棵樹的右子樹都與另一棵樹的左子樹映象對稱。

2、程式碼實現

package Q0199.Q0101SymmetricTree;

import DataStructure.TreeNode;

public class Solution {
    public boolean isSymmetric(TreeNode root) {
        return root == null || isSymmetricAux(root.left, root.right);
    }

    private boolean isSymmetricAux(TreeNode left, TreeNode right) {
        if (left == null || right == null)
            return left == right;
        if (left.val != right.val)
            return false;
        return isSymmetricAux(left.left, right.right) && isSymmetricAux(left.right, right.left);
    }
}

3、複雜度分析
時間複雜度: O(n)
空間複雜度: O(n)