天天看點

LeetCode-144. 二叉樹的前序周遊(java)

一、前言:

👨‍🎓作者:bug菌

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

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

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

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

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

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

二、題目描述:

題目:

      給你二叉樹的根節點 ​

​root​

​ ,傳回它節點值的 前序周遊。

具體請看如下示例:

示例 1:

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

示例 2:

輸入:root = []
輸出:[]      
LeetCode-144. 二叉樹的前序周遊(java)

示例3:

輸入:root = [1]
輸出:[1]      
LeetCode-144. 二叉樹的前序周遊(java)

示例4:

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

示例5:

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

提示:

  • 樹中節點數目在範圍​

    ​[0, 100]​

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

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

題目難度:⭐⭐

三、思路分析:

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

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

四、算法實作:

AC代碼

具體算法代碼實作如下:

class Solution {
    public List<Integer> preorderTraversal(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-144. 二叉樹的前序周遊(java)

五、總結:

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

LeetCode-144. 二叉樹的前序周遊(java)

複雜度分析:

  • 時間複雜度:O(n)。其中 nn 是二叉樹的節點數。每一個節點恰好被周遊一次。
  • 空間複雜度: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-144. 二叉樹的前序周遊(java)
LeetCode-144. 二叉樹的前序周遊(java)

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

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

💗如果對文章有任何疑問,還請文末留言或者加群吧【QQ交流群:708072830】;

繼續閱讀