天天看點

LeetCode-145. 二叉樹的後序周遊(java)

一、前言:

👨‍🎓作者:bug菌

✏️部落格:CSDN​、掘金等

💌公衆号:​​猿圈奇妙屋​​

🚫特别聲明:原創不易,轉載請附上原文出處連結和本文聲明,謝謝配合。

🙏版權聲明:文章裡可能部分文字或者圖檔來源于網際網路或者百度百科,如有侵權請聯系bug菌處理。

       哈喽,小夥伴們,我是bug菌呀👀。金三銀四,又到了刷題月啦。是以不管你是準備跳槽還是在職,都一起行動起來,順應這個時代月幹點該幹的事兒👣。是以,趕緊跟着bug菌的步伐卷起來吧⏰,變強從這一刻開始!➕🧈

       小夥伴們在批閱文章的過程中如果覺得文章對您有一絲絲幫助,還請别吝啬您手裡的贊呀,大膽的把文章點亮👍吧,您的點贊三連(收藏⭐️+關注👨‍🎓+留言📃)就是對bug菌我創作道路上最好的鼓勵與支援😘。時光不棄🏃🏻‍♀️,創作不停💕,加油☘️

二、題目描述:

題目:

    給你一棵二叉樹的根節點 ​

​root​

​ ,傳回其節點值的 後序周遊 。

具體請看如下示例:

示例 1:

LeetCode-145. 二叉樹的後序周遊(java)
輸入:root = [1,null,2,3]
輸出:[3,2,1]      

示例 2:

輸入:root = []
輸出:[]      

示例 3:

輸入:root = [1]
輸出:[1]      

提示:

  • 樹中節點的數目在範圍​

    ​[0, 100]​

    ​ 内
  • ​-100 <= Node.val <= 100​

題目來源:​​LeetCode官網​​

題目難度:⭐⭐

三、思路分析:

       這是二叉樹的後序周遊,像前幾期我是細講了二叉樹的前序周遊與中序周遊,不記得的小夥伴可以參考我如下這兩篇,寫法都大差不差,唯獨就是周遊順序有點不同,這也是前中後序三法的唯一差別之處。

  • ​​LeetCode-94. 二叉樹的中序周遊(day19)​​
  • ​​LeetCode-144. 二叉樹的前序周遊(day33)​​

       那什麼是後序周遊呢?所謂二叉樹的前序周遊:它是按照通路左子樹->右子樹->根節點順序方式來周遊這棵樹,而在通路二叉樹的左子樹或者右子樹的時候,我們按照同樣的順序周遊,直到周遊完整棵樹即可。這不就是你們喜歡的遞歸法,純天然契合,套娃模式開啟。

四、算法實作:

AC代碼

具體算法代碼實作如下:

class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {

        //定義一個全局變量。用于存放節點
        List<Integer> res = new ArrayList<Integer>();
        preorder(root, res);
        return res;
    }

    //按根節點->左子樹->右子樹順序周遊
    public void preorder(TreeNode root, List<Integer> res) {
        //遇空直接傳回
        if (root == null) {
            return;
        }
        //根節點->左子樹->右子樹順序      

五、總結:

leetcode送出運作結果截圖如下:

LeetCode-145. 二叉樹的後序周遊(java)

複雜度分析:

  • 時間複雜度:O(n),其中 n 是二叉搜尋樹的節點數。每一個節點恰好被周遊一次。
  • 空間複雜度:O(n),為遞歸過程中棧的開銷,平均情況下為 O(logn),最壞情況下樹呈現鍊狀,為 O(n)。

       綜上,我是把二叉樹的前中後序周遊都講解了一遍,要是遇到面試題,那你們做不出真就對不起我了啊。雖然這三題寫法都一直,唯獨就是遞歸函數裡頭對左右節點及根節點前後順序的問題,其他的都一緻,不知道你們寫了這麼久,其實我都是同一道解題,然後換了下順序罷了,但是對于初學者來說肯定是不能偷懶啊,我是因為寫多了,自然就熟悉。

       再者,解題道路千萬條,歡迎小夥伴們腦洞大開,如果你們有啥更好的想法或者思路,歡迎評論區告訴我哦,大家一起互相借鑒互相學習,方能成長的更快。

       好啦,以上就是本期的所有内容啦,咱們下期見咯。

六、熱門推薦:

  1. ​​leetcode-9.回文數​​
  2. ​​leetcode-1.兩數之和​​
  3. ​​leetcode-13.羅馬數字轉整數​​
  4. ​​leetcode-14.最長公共字首​​
  5. ​​leetcode-20.有效的括号​​
  6. ​​leetcode-21.合并兩個有序連結清單​​
  7. ​​leetcode-26. 删除有序數組中的重複項​​

七、文末:

​​《每日一題LeetCode》​​,帶着你一塊兒刷題,專欄每一篇都附帶詳細解法,手把手帶你解題。

        一個人刷可能會覺得很累很難堅持,但是一群人刷就會覺得它是一件很有意義的事兒,互相督促互相鼓勵,一起變強。

       我是bug菌,一名想走👣出大山改變命運的程式猿。接下來的路還很長,都等待着我們去突破、去挑戰。來吧,小夥伴們,我們一起加油!未來皆可期,fighting!

最後送大家兩句話,與諸君共勉!

☘️做你想做的人,沒有時間限制,隻要願意,什麼時候都可以start,

🍀你能從現在開始改變,也可以一成不變,這件事,沒有規矩可言,你可以活出最精彩的自己。

LeetCode-145. 二叉樹的後序周遊(java)

💌如果文章對您有所幫助,就請留下您的贊吧!(#^.^#);

💝如果喜歡bug菌分享的文章,就請給bug菌點個關注吧!(๑′ᴗ‵๑)づ╭❤~;

繼續閱讀