每日一題:LeetCode-589.N叉樹的前序遍歷

每日一題系列(day 01)

前言:

🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈

?? 🔎🔎如果說代碼有靈魂,那么它的靈魂一定是👉👉算法👈👈,因此,想要寫出💚優美的程序💚,核心算法是必不可少的,少年,你渴望力量嗎😆😆,想掌握程序的靈魂嗎???那么就必須踏上這樣一條漫長的道路🏇🏇,我們要做的,就是斬妖除魔💥💥,打怪升級!💪💪當然切記不可😈走火入魔😈,每日打怪,日日累積,終能成圣🙏🙏!今天就開啟我們的斬妖之旅!????

LeetCode-589.N叉樹的前序遍歷:

題目:

給定一個 n 叉樹的根節點 root ,返回 其節點值的 前序遍歷 。n 叉樹 在輸入中按層序遍歷進行序列化表示,每組子節點由空值 null 分隔(請參見示例)。

示例1:

在這里插入圖片描述

示例2:

在這里插入圖片描述

注意事項:

  • 節點總數在范圍 [0, 104]內
  • 0 <= Node.val <= 104
  • n 叉樹的高度小于或等于 1000

解法一:

??思路:

??首先開辟一個數組,用來存放N叉樹前序遍歷的結果,先將根節點壓入數組,然后進行范圍for(順序遍歷二叉樹的每一個節點),將前序遍歷的結果放入到tmp數組中,再使用范圍for將tmp數組的值拷貝回原數組。最后返回原數組的值即可。

??但是這樣寫的效率非常低,將ans數組拷貝到tmp數組,再將tmp數組拷貝回原數組,這樣來來回回的拷貝效率實在是很低,所以我們可以考慮用封裝來優化。

??代碼實現:

/*
// Definition for a Node.
class Node {
public:int val;vector<Node*> children;Node() {}Node(int _val) {val = _val;}Node(int _val, vector<Node*> _children) {val = _val;children = _children;}
};
*/class Solution {
public:vector<int> preorder(Node* root) {if(root == NULL) return vector<int>{};vector<int> ans;//開辟一個數組用來記錄前序遍歷結果ans.push_back(root -> val);//將前序遍歷到的每個節點的值壓入到數組中for(auto x : root -> children)//范圍for依次遍歷N叉樹的每個節點{vector<int> tmp = preorder(x);//用tmp數組接收前序遍歷的結果for(auto y : tmp) ans.push_back(y);//拷貝完成之后再將tmp數組元素拷貝回原數組}return ans;//返回前序遍歷數組的結果即可}
};

解法二:

??思路:

??以上是不使用封裝解決前序遍歷問題的方法,沒有什么問題是一層封裝解決不了的,如果有,那就兩層。

??1、我們在preorder函數中定義一個數組ans用來記錄前序遍歷結果,封裝一個前序遍歷的函數,將根節點和數組傳ans入函數,其中數組傳參是用引用傳參(避免多一次拷貝)最后返回數組即可。
??2、在函數內部,我們首先將遍歷到的每個節點的值壓入到數組ans當中,再使用范圍for對N叉樹的每個子孩子遍歷,并且將前序遍歷到的節點全部拷貝到ans數組中。

時間復雜度O(N),其中 n 為 N 叉樹的節點。每個節點恰好被遍歷一次。
空間復雜度O(N),遞歸過程中需要調用棧的開銷,平均情況下為 O(log?N),最壞情況下樹的深度為 N?1,此時需要的空間復雜度為 O(N)。

??代碼實現:

/*
// Definition for a Node.
class Node {
public:int val;vector<Node*> children;Node() {}Node(int _val) {val = _val;}Node(int _val, vector<Node*> _children) {val = _val;children = _children;}
};
*/class Solution {
public:void _preorder(Node *root, vector<int> &ans)//引用傳參,少一次拷貝構造{if(root == NULL) return;ans.push_back(root -> val);//將前序遍歷的節點值壓入數組中for(auto x : root -> children)//范圍for便利{_preorder(x, ans);//將前序遍歷結果也壓入到ans數組中}return;}vector<int> preorder(Node* root) {vector<int> ans;//記錄前序遍歷的結果_preorder(root, ans);//進行前序遍歷return ans;//返回前序遍歷的數組}
};

??今天第一次寫的題也是比較簡單的,主要是對數組拷貝的優化,將多次拷貝優化為在一個數組內操作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160434.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160434.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160434.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

package.json 依賴版本中的符號含義

依賴包的版本問題 實例說明~1.2.3主版本次要版本補丁版本;1.2.3 < version < 1.3.0;~1.2主版本次要版本;1.2.0 < version < 1.3.0~1主版本;1.0.0 < version < 2.0.0 符號實例版本范圍說明1.0.01.0.0鎖定1.0.0版本&#xff0c;必須這個版本。^會匹配最新的大…

7種SQL的進階用法

1.自定義排序&#xff08;ORDER BY FIELD&#xff09; 在MySQL中ORDER BY排序除了可以用ASC和DESC之外&#xff0c;還可以使用自定義排序方式來實現。 CREATE TABLE movies ( id INT PRIMARY KEY AUTO_INCREMENT, movie_name VARCHAR(255), actors VARCHAR(255), price DEC…

基于鵜鶘算法優化概率神經網絡PNN的分類預測 - 附代碼

基于鵜鶘算法優化概率神經網絡PNN的分類預測 - 附代碼 文章目錄 基于鵜鶘算法優化概率神經網絡PNN的分類預測 - 附代碼1.PNN網絡概述2.變壓器故障診街系統相關背景2.1 模型建立 3.基于鵜鶘優化的PNN網絡5.測試結果6.參考文獻7.Matlab代碼 摘要&#xff1a;針對PNN神經網絡的光滑…

基于向量加權平均算法優化概率神經網絡PNN的分類預測 - 附代碼

基于向量加權平均算法優化概率神經網絡PNN的分類預測 - 附代碼 文章目錄 基于向量加權平均算法優化概率神經網絡PNN的分類預測 - 附代碼1.PNN網絡概述2.變壓器故障診街系統相關背景2.1 模型建立 3.基于向量加權平均優化的PNN網絡5.測試結果6.參考文獻7.Matlab代碼 摘要&#xf…

win10系統中,任務欄卡住,鼠標移動到任務欄轉圈加載中

原因&#xff1a; 1.系統更新導致的問題 2.任務欄的“資訊與興趣導致” 解決&#xff1a; 方法一&#xff1a;重新啟動資源管理器任務 1.快捷鍵調出任務管理器&#xff1a;ctrlshiftesc,或ctrlaltdel 1.1.找到“windows資源管理器&#xff0c;鼠標右鍵&#xff0c;選擇重…

邊云協同架構設計

文章目錄 一. "邊云協同"是什么&#xff1f;二. "邊云協同"主要包括6種協同2.1 資源協同2.2 數據協同2.3 智能協同2.4 應用管理協同2.5 業務管理協同2.6 服務協同 三. "邊云協同"的優勢 其它相關推薦&#xff1a; 系統架構之微服務架構 系統架構…

python文本

文本 除了數字 Python 還可以操作文本&#xff08;由 str 類型表示&#xff0c;稱為“字符串”&#xff09;。 這包括字符 "!", 單詞 "rabbit", 名稱 "Paris", 句子 "Got your back." 等等. "Yay! :)"。 它們可以用成對的單…

【JS】Chapter15-高階技巧

站在巨人的肩膀上 黑馬程序員前端JavaScript入門到精通全套視頻教程&#xff0c;javascript核心進階ES6語法、API、js高級等基礎知識和實戰教程 &#xff08;十五&#xff09;高階技巧 1. 深淺拷貝 開發中我們經常需要復制一個對象。如果直接用賦值會有下面問題&#xff1a;/…

微信訂房功能怎么做_公眾號里怎么實現在線訂房系統

微信公眾號在線訂房系統&#xff1a;一鍵解決您的住宿問題 在當今數字化時代&#xff0c;微信公眾號已經成為人們生活中不可或缺的一部分。它提供了各種各樣的功能和服務&#xff0c;讓我們的生活變得更加便捷和高效。而如今&#xff0c;微信公眾號也實現了在線訂房功能&#…

什么是應急演練腳本?其設計原則是什么?

應急演練腳本是一種系統性、有計劃的模擬性文件&#xff0c;旨在測試和評估組織在緊急情況下的應對能力。這種腳本提供了一系列步驟和場景&#xff0c;以確保團隊能夠高效、協調地應對各種緊急事件。以下將詳細探討應急演練腳本的定義、設計原則以及實施過程。 一、應急演練腳本…

常見面試題-Redis持久化策略

談談Redis 的持久化策略&#xff1f; 參考文章&#xff1a; Redis 持久化機制演進與百度智能云的實踐 Redis的確是將數據存儲在內存的&#xff0c;但是也會有相關的持久化機制將內存持久化備份到磁盤&#xff0c;以便于重啟時數據能夠重新恢復到內存中&#xff0c;避免數據丟…

【Python 千題 —— 基礎篇】奇數列表

題目描述 題目描述 創建奇數列表。使用 for 循環創建一個包含 20 以內奇數的列表。 輸入描述 無輸入。 輸出描述 輸出創建的列表。 示例 示例 ① 輸出&#xff1a; 創建的奇數列表為: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]代碼講解 下面是本題的代碼&#xff1a; #…

9. 回文數 --力扣 --JAVA

題目 給你一個整數 x &#xff0c;如果 x 是一個回文整數&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 回文數是指正序&#xff08;從左向右&#xff09;和倒序&#xff08;從右向左&#xff09;讀都是一樣的整數。 例如&#xff0c;121 是回文&#xff0…

二、爬蟲-爬取肯德基在北京的店鋪地址

1、算法框架解釋 針對這個案例&#xff0c;現在對爬蟲的基礎使用做總結如下&#xff1a; 1、算法框架 (1)設定傳入參數 ~url: 當前整個頁面的url:當前頁面的網址 當前頁面某個局部的url:打開檢查 ~data:需要爬取數據的關鍵字&…

DB2中實現數據字段的拼接(LISTAGG() 與 xml2clob、xmlagg)

DB2中實現數據字段拼接&#xff08;LISTAGG 與 xml2clob、xmlagg&#xff09; 1. 使用函數LISTAGG()1.1 同oracle實現方式1.2 DB2中使用LISTAGG()1.2.1 關于DB2版本1.2.2 數據準備1.2.3 代碼實現 2 解決DB2中關于 LISTAGG() 超長問題2.1 使用xmlagg xmlelement2.2 將xml標簽去…

數據結構與算法編程題11

已知兩個鏈表A和B分別表示兩個集合&#xff0c;其元素遞增排列。 請設計算法求出A與B的交集&#xff0c;并存放于A鏈表中。 a: 1, 2, 2, 4, 5, 7, 8, 9, 10 b: 1, 2, 3, 6, 7, 8 #include <iostream> using namespace std;typedef int Elemtype; #define ERROR 0; #defin…

【iOS】實現評論區展開效果

文章目錄 前言實現行高自適應實現評論展開效果解決cell中的buttom的復用問題 前言 在知乎日報的評論區中&#xff0c;用到了Masonry行高自適應來實現評論的展開&#xff0c;這里設計許多控件的約束問題&#xff0c;當時困擾了筆者許久&#xff0c;特此撰寫博客記錄 實現行高自…

如何構建更簡潔的前端架構?

目錄 為什么需要前端架構&#xff1f; 那么&#xff0c;前端架構是什么樣的呢&#xff1f; 使用了哪些層&#xff1f; 那么&#xff0c;這種架構會出什么問題呢&#xff1f; 我們應該如何避免這些錯誤&#xff1f; 哪些原則應適用于組件&#xff1f; Anti-Patterns 反模…

小程序存在優惠卷遍歷,但是歪了

進入小程序&#xff0c;因為是一個小商城&#xff0c;所以照例先查看收貨地址是否存在越權&#xff0c;以及能否未授權訪問&#xff0c;但是發現不存在這些問題&#xff0c;所以去查看優惠卷 進入領券中心&#xff0c;點擊領取優惠券時抓包 發現數據包&#xff0c;存在敏感參數…

數據庫的級聯刪除

級聯刪除是指在數據庫中刪除一個對象時&#xff0c;與該對象有關的其他對象也被自動刪除。在 Django 中&#xff0c;級聯刪除通常通過在模型中定義外鍵時使用 on_delete 參數來實現。以下是一些常見的 on_delete 選項&#xff1a; 1.models.CASCADE: 當關聯的對象被刪除時&…