一、前言:
👨🎓作者:bug菌
✏️部落格:CSDN、掘金等
💌公衆号:猿圈奇妙屋
🚫特别聲明:原創不易,轉載請附上原文出處連結和本文聲明,謝謝配合。
🙏版權聲明:文章裡可能部分文字或者圖檔來源于網際網路或者百度百科,如有侵權請聯系bug菌處理。
哈喽,小夥伴們,我是bug菌呀👀。金三銀四,又到了刷題月啦。是以不管你是準備跳槽還是在職,都一起行動起來,順應這個時代月幹點該幹的事兒👣。是以,趕緊跟着bug菌的步伐卷起來吧⏰,變強從這一刻開始!➕🧈
小夥伴們在批閱文章的過程中如果覺得文章對您有一絲絲幫助,還請别吝啬您手裡的贊呀,大膽的把文章點亮👍吧,您的點贊三連(收藏⭐️+關注👨🎓+留言📃)就是對bug菌我創作道路上最好的鼓勵與支援😘。時光不棄🏃🏻♀️,創作不停💕,加油☘️
二、題目描述:
題目:
給你二叉樹的根節點 root
,傳回它節點值的 前序周遊。
具體請看如下示例:
示例 1:

輸入:root = [1,null,2,3]
輸出:[1,2,3]
示例 2:
輸入:root = []
輸出:[]
示例3:
輸入:root = [1]
輸出:[1]
示例4:
輸入:root = [1,2]
輸出:[1,2]
示例5:
輸入:root = [1,null,2]
輸出:[1,2]
提示:
- 樹中節點數目在範圍
内[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送出運作結果截圖如下:
複雜度分析:
- 時間複雜度:O(n)。其中 nn 是二叉樹的節點數。每一個節點恰好被周遊一次。
- 空間複雜度:O(n)。為遞歸過程中棧的開銷,平均情況下為 O(logn),最壞情況下樹呈現鍊狀,為 O(n)。
總而言之,這種題就是你懂它的周遊順序,然後寫法都一緻的,懂一種解題思路即可,比如你們最喜歡的遞歸法,這就很契合,但不是什啥時候就講究遞歸啊,比如這題其實疊代也不錯,相對遞歸就是麻煩一點,感興趣的小夥伴歡迎嘗試。
再者,解題道路千萬條,歡迎小夥伴們腦洞大開,如果你們有啥更好的想法或者思路,歡迎評論區告訴我哦,大家一起互相借鑒互相學習,方能成長的更快。
好啦,以上就是本期的所有内容啦,咱們下期見咯。
六、熱門推薦:
- leetcode-9.回文數
- leetcode-1.兩數之和
- leetcode-13.羅馬數字轉整數
- leetcode-14.最長公共字首
- leetcode-20.有效的括号
- leetcode-21.合并兩個有序連結清單
- leetcode-26. 删除有序數組中的重複項
七、文末:
《每日一題LeetCode》,帶着你一塊兒刷題,專欄每一篇都附帶詳細解法,手把手帶你解題。
一個人刷可能會覺得很累很難堅持,但是一群人刷就會覺得它是一件很有意義的事兒,互相督促互相鼓勵,一起變強。
我是bug菌,一名想走👣出大山改變命運的程式猿。接下來的路還很長,都等待着我們去突破、去挑戰。來吧,小夥伴們,我們一起加油!未來皆可期,fighting!
最後送大家兩句話,與諸君共勉!
☘️做你想做的人,沒有時間限制,隻要願意,什麼時候都可以start,
🍀你能從現在開始改變,也可以一成不變,這件事,沒有規矩可言,你可以活出最精彩的自己。
💌如果文章對您有所幫助,就請留下您的贊吧!(#^.^#);
💝如果喜歡bug菌分享的文章,就請給bug菌點個關注吧!(๑′ᴗ‵๑)づ╭❤~;
💗如果對文章有任何疑問,還請文末留言或者加群吧【QQ交流群:708072830】;