日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【算法系列之五】对称二叉树

發(fā)布時間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【算法系列之五】对称二叉树 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

給定一個二叉樹,檢查它是否是鏡像對稱的。

例如,二叉樹?[1,2,2,3,4,4,3]?是對稱的。

1/ \2 2/ \ / \ 3 4 4 3

但是下面這個?[1,2,2,null,3,null,3]?則不是鏡像對稱的:

1/ \2 2\ \3 3

說明:

如果你可以運用遞歸和迭代兩種方法解決這個問題,會很加分。

方法一:遞歸

如果一個樹的左子樹與右子樹鏡像對稱,那么這個樹是對稱的。

因此,該問題可以轉(zhuǎn)化為:兩個樹在什么情況下互為鏡像?

如果同時滿足下面的條件,兩個樹互為鏡像:

  • 它們的兩個根結(jié)點具有相同的值。
  • 每個樹的右子樹都與另一個樹的左子樹鏡像對稱。
  • 就像人站在鏡子前審視自己那樣。鏡中的反射與現(xiàn)實中的人具有相同的頭部,但反射的右臂對應于人的左臂,反之亦然。

    上面的解釋可以很自然地轉(zhuǎn)換為一個遞歸函數(shù),如下所示:

    public boolean isSymmetric(TreeNode root) {return isMirror(root, root); }public boolean isMirror(TreeNode t1, TreeNode t2) {if (t1 == null && t2 == null) return true;if (t1 == null || t2 == null) return false;return (t1.val == t2.val)&& isMirror(t1.right, t2.left)&& isMirror(t1.left, t2.right); }

    復雜度分析

    • 時間復雜度:O(n)O(n)。因為我們遍歷整個輸入樹一次,所以總的運行時間為?O(n)O(n),其中?nn?是樹中結(jié)點的總數(shù)。
    • 空間復雜度:遞歸調(diào)用的次數(shù)受樹的高度限制。在最糟糕的情況下,樹是線性的,其高度為?O(n)O(n)。因此,在最糟糕的情況下,由棧上的遞歸調(diào)用造成的空間復雜度為?O(n)O(n)。

    方法二:迭代

    除了遞歸的方法外,我們也可以利用隊列進行迭代。隊列中每兩個連續(xù)的結(jié)點應該是相等的,而且它們的子樹互為鏡像。最初,隊列中包含的是?root?以及?root。該算法的工作原理類似于 BFS,但存在一些關(guān)鍵差異。每次提取兩個結(jié)點并比較它們的值。然后,將兩個結(jié)點的左右子結(jié)點按相反的順序插入隊列中。當隊列為空時,或者我們檢測到樹不對稱(即從隊列中取出兩個不相等的連續(xù)結(jié)點)時,該算法結(jié)束。

    public boolean isSymmetric(TreeNode root) {Queue<TreeNode> q = new LinkedList<>();q.add(root);q.add(root);while (!q.isEmpty()) {TreeNode t1 = q.poll();TreeNode t2 = q.poll();if (t1 == null && t2 == null) continue;if (t1 == null || t2 == null) return false;if (t1.val != t2.val) return false;q.add(t1.left);q.add(t2.right);q.add(t1.right);q.add(t2.left);}return true; }

    復雜度分析

    • 時間復雜度:O(n)O(n)。因為我們遍歷整個輸入樹一次,所以總的運行時間為?O(n)O(n),其中?nn?是樹中結(jié)點的總數(shù)。
    • 空間復雜度:搜索隊列需要額外的空間。在最糟糕的情況下,我們不得不向隊列中插入?O(n)O(n)?個結(jié)點。因此,空間復雜度為?O(n)O(n)。

    總結(jié)

    以上是生活随笔為你收集整理的【算法系列之五】对称二叉树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。