刷題LeetCode:101.對稱二叉樹

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/symmetric-tree/

題目描述

給定一個二叉樹的根節(jié)點,檢查是否軸對稱。

題目分析

若一個樹的左右子樹鏡像對稱,那么這個二叉樹就是對稱的。
那么左右兩個樹什么情況下互為鏡像?

  • 它們的兩個根結(jié)點具有相同的值
  • 每個樹的右子樹都與另一個樹的左子樹鏡像對稱

因而,可考慮用遞歸實現(xiàn)。

代碼實現(xiàn)

public class DuiCheng101 {


    /**
     * 迭代算法
     * 隊列中添加 對稱的兩個節(jié)點,判斷是否一致
     *
     * @param root
     * @return
     */
    public boolean isSymmetric2(TreeNode root) {
        if (root == null) {
            return true;
        }
        TreeNode left = root.left;
        TreeNode right = root.right;
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(left);
        queue.offer(right);

        while (!queue.isEmpty()) {
            left = queue.poll();
            right = queue.poll();

            if (left == null && right == null) {
                continue;
            }
            if (left == null || right == null) {
                return false;
            }
            if (left.val != right.val) {
                return false;
            }

            queue.offer(left.left);
            queue.offer(right.right);

            queue.offer(left.right);
            queue.offer(right.left);

        }
        return true;
    }


    /**
     * 【遞歸】
     * 比較左右兩棵樹
     *
     * @param root
     * @return
     */
    public boolean isSymmetric(TreeNode root) {
        if (root == null) {
            return true;
        }
        return check(root.left, root.right);
    }

    private boolean check(TreeNode p, TreeNode q) {
        if (p == null && q == null) {
            return true;
        }
        if (p == null && q != null) {
            return false;
        }
        if (p != null && q == null) {
            return false;
        }

        if (p.val != q.val) {
            return false;
        }
        return check(p.left, q.right) && check(p.right, q.left);
    }


}

復(fù)雜度

  • 時間復(fù)雜度:O(n),因為遍歷了整棵樹,因而漸進時間復(fù)雜度為O(n)
  • 空間復(fù)雜度:遞歸層數(shù)不超過n,因而漸進空間復(fù)雜度為O(n)

好了,今天就到這里,感謝各位看官到這里,不如點個關(guān)注吧!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容