【LeetCode二叉樹進階題目】606,102,107

二叉樹進階題目

  • 606. 根據二叉樹創建字符串
    • 解題思路及實現
  • 102. 二叉樹的層序遍歷
    • 解題思路及實現
  • 107. 二叉樹的層序遍歷 II
    • 解題思路及實現

606. 根據二叉樹創建字符串

描述

給你二叉樹的根節點 root ,請你采用前序遍歷的方式,將二叉樹轉化為一個由括號和整數組成的字符串,返回構造出的字符串。

空節點使用一對空括號對 “()” 表示,轉化后需要省略所有不影響字符串與原始二叉樹之間的一對一映射關系的空括號對。

示例在這里插入圖片描述

輸入:root = [1,2,3,4]
輸出:“1(2(4))(3)”
解釋:初步轉化后得到 “1(2(4()())())(3()())” ,但省略所有不必要的空括號對后,字符串應該是"1(2(4))(3)" 。

在這里插入圖片描述

輸入:root = [1,2,3,null,4]
輸出:“1(2()(4))(3)”
解釋:和第一個示例類似,但是無法省略第一個空括號對,否則會破壞輸入與輸出一一映射的關系。

解題思路及實現

在這里插入圖片描述

class Solution {
public:string tree2str(TreeNode* root) {if(root == nullptr)return string();string str;str+=to_string(root->val);if(root->left){str+='(';str+=tree2str(root->left);str+=')';}else if(root->right)//走到這里,左一定為空{str+="()";}if(root->right){str+='(';str+=tree2str(root->right);str+=')';}return str;}
};

102. 二叉樹的層序遍歷

給你二叉樹的根節點 root ,返回其節點值的 層序遍歷 。 (即逐層地,從左到右訪問所有節點)。

示例
在這里插入圖片描述

輸入:root = [3,9,20,null,null,15,7]
輸出:[[3],[9,20],[15,7]]

解題思路及實現

在這里插入圖片描述

class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {queue<TreeNode*> q;vector<vector<int>> vv;int LevelSize=0;if(root){q.push(root);LevelSize=1;}while(!q.empty()){vector<int> v;//一層一層出while(LevelSize--){TreeNode* front=q.front();q.pop();v.push_back(front->val);if(front->left)q.push(front->left);if(front->right)q.push(front->right);} vv.push_back(v);//當前一層出完了,下一層都進隊列了,那q.size()就是下一層數據數LevelSize=q.size();}return vv;}
};

107. 二叉樹的層序遍歷 II

給你二叉樹的根節點 root ,返回其節點值 自底向上 的層序遍歷 。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)

示例
在這里插入圖片描述

輸入:root = [3,9,20,null,null,15,7]
輸出:[[15,7],[9,20],[3]]

解題思路及實現

這道題其實就是上面的變形,大家應該有這個思路。把結果翻轉一下就好了。

class Solution {
public:vector<vector<int>> levelOrderBottom(TreeNode* root) {queue<TreeNode*> q;vector<vector<int>> vv;int LevelSize=0;if(root){q.push(root);LevelSize=1;}while(!q.empty()){vector<int> v;//一層一層出while(LevelSize--){TreeNode* front=q.front();q.pop();v.push_back(front->val);if(front->left)q.push(front->left);if(front->right)q.push(front->right);} vv.push_back(v);//當前一層出完了,下一層都進隊列了,那q.size()就是下一層數據數LevelSize=q.size();}reverse(vv.begin(),vv.end());return vv;}
};

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

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

相關文章

從零開始學習typescript——運算符(算術運算符、賦值運算符、比較運算符)

算術運算符 算術運算符主要是針對數值類型和長整型&#xff1b;包括有加法、減法、乘法、除法、自增、自減等運算 加法&#xff08;&#xff09; let x:number1let y:number 2console.log(xy)減法&#xff08;-&#xff09; let x:number1let y:number 2console.log(y-x)乘法…

晶振有哪幾種?晶振旁邊的兩個電容起什么作用?

晶振可以分為普通晶振、溫補晶振、壓控晶振、恒溫晶振、差分晶振。 普通晶振通常用作微處理器的時鐘器件&#xff0c;主要應用于那些穩定度要求不要的設備中&#xff0c;例如電視機、微波爐。 溫補晶振&#xff0c;在晶振內部采取了對晶體頻率、溫度特性進行補償&#xff0c;已…

軟件工程理論與實踐 (呂云翔) 第十三章 軟件測試方法與過程課后習題及其答案解析

第十三章 軟件測試方法與過程 1.判斷題 &#xff08;1&#xff09;白盒測試無須考慮模塊內部的執行過程和程序結構&#xff0c;只需了解模塊的功能即可。() 解析&#xff1a;白盒測試需要考慮模塊內部的執行過程和程序結構&#xff0c;以便設計測試用例和覆蓋代碼路徑。 &a…

軟文推廣有什么作用?媒介盒子分享

數字時代&#xff0c;品牌方以往的營銷打法可能需要應時而變&#xff0c;傳統的廣告模式很難將品牌推廣出去&#xff0c;原因就在于傳統廣告的成本高昂并且針對性較弱&#xff0c;而軟文推廣能夠通過較低的成本將產品或品牌信息送到消費者面前&#xff0c;今天媒介盒子就來分享…

58同城算法工程師一面&二面 面試題

來源&#xff1a;投稿 作者&#xff1a;LSC 編輯&#xff1a;學姐 一面 40min 1.Gbdt和xgboost的區別 XGBoost是對GBDT的改進和擴展&#xff0c;它提供了更高的效率、更好的性能、正則化技術、內置特征選擇等功能。 (1)正則化: GBDT使用基本的樹模型&#xff0c;并在每一輪…

vue3.0 + qiankun遇到的問題

進入子應用再回到主應用切換動態路由時 TypeError: Cannot read properties of undefined (reading ‘appWrapperGetter’) application ‘plat’ died in status UNMOUNTING: instance.$destroy is not a function 第一個報錯是因為子應用切走時沒有銷毀 vue的實例&#xff0…

常用RFC規范匯總

官網&#xff1a;https://www.rfc-editor.org/ The RFC Series (ISSN 2070-1721) contains technical and organizational documents about the Internet, including the specifications and policy documents produced by five streams: the Internet Engineering Task Force …

TCP/IP

分層模型 TCP 傳輸控制協議 UDP 用戶數據包協議 四層 應用層 負責發送/接收消息 傳輸層 負責拆分和組裝 .期間會有編號 網絡層 TCP/UDP 屬于網絡層, 不會判斷和處理編號 數據鏈路層 以太網 ,網絡設備 TCP 連接 TCP連接需要端口,進行通信 Java 通過Socket 接收消息 發送 …

基于SpringBoot+Vue的體檢預約管理系統

基于SpringBootVue的體檢預約管理系統的設計與實現~ 開發語言&#xff1a;Java數據庫&#xff1a;MySQL技術&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系統展示 主頁 管理員界面 用戶界面 摘要 體檢預約管理系統是一種基于Spring Boot…

Vue3常用操作

一、Vue3項目構建 1、安裝最新版本vue npm create vuelatest 2、選擇需要的配置 3、進入項目 cd 項目名稱 4、下載依賴 npm install 5、啟動項目 npm run dev

chatGLM3微調

文章目錄 一、問答數據集生成器使用設置問題啟動使用產出效果 二、進行微調第一步&#xff1a;下載模型第二步&#xff1a;項目準備2.1 下載項目2.2 然后使用 pip 安裝依賴2.3 開始 第三步進行微調3.1安裝相關依賴3.2準備數據集&#xff0c;并且上傳3.3對數據集進行預處理3.4 進…

如何使用技術SEO來優化評論

你在網上購買嗎&#xff1f;我的意思是&#xff0c;在當今時代&#xff0c;誰不這樣做&#xff1f;作為買家&#xff0c;無論您想購買什么&#xff0c;您都了解全面和高質量評論的價值。這是您在決定是否購買產品時考慮的重要因素。 這就是為什么許多人在網上購物之前使用評論…

移動端click事件、touch事件、tap事件的區別

在移動端&#xff0c;有三種常見的事件類型&#xff0c;click事件、touch事件、tap事件。它們的區別如下&#xff1a; click事件&#xff1a;click事件是在用戶點擊屏幕的時候觸發&#xff0c;如果是移動設備&#xff0c;則會在用戶點擊屏幕的同時觸發touch事件。但是&#xff…

【開源】基于Vue和SpringBoot的康復中心管理系統

項目編號&#xff1a; S 056 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S056&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S056&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 普通用戶模塊2.2 護工模塊2.3 管理員…

uni-app中vue3+setup實現下拉刷新、上拉加載更多效果

在小程序或各類app中&#xff0c;下拉刷新和上拉加載更多是極為常見和使用非常頻繁的兩個功能&#xff0c;通過對這兩個功能的合理使用可以極大的方便用戶進行操作。 合理的設計邏輯才能更容易挽留住用戶&#xff0c;因為這些細節性的小功能點就變得極為重要起來。 那么在uni…

基于WEB的停車場管理系統的設計和實現【附源碼】

基于WEB的停車場管理系統的設計和實現 摘 要 隨著現代社會的快速發展&#xff0c;人民生活水平快速提高&#xff0c;汽車的數量飛速增加&#xff0c;與此同時停車問題也越來越受到人們的關注&#xff0c;為了實現對停車場進行有效的管理&#xff0c;結合一些停車場的模式和現狀…

游戲被攻擊了怎么辦

隨著網絡技術和網絡應用的發展&#xff0c;網絡安全問題顯得越來越重要&#xff0c;在創造一個和諧共贏的互聯網生態環境的路途中總是會遇到各種各樣的問題。最常見的當屬于DDOS攻擊&#xff08;Distributed Denial of Service&#xff09;即分布式阻斷服務。由于容易實施、難以…

【LeetCode刷題】--40.組合總和II

40.組合總和II 本題詳解&#xff1a;回溯算法 class Solution {public List<List<Integer>> combinationSum2(int[] candidates, int target) {int len candidates.length;List<List<Integer>> res new ArrayList<>();if (len 0) {return re…

深度學習之基于YoloV5車輛和行人目標檢測系統

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介YOLOv5 簡介YOLOv5 特點 車輛和行人目標檢測系統 二、功能三、系統四. 總結 一項目簡介 # 深度學習之基于 YOLOv5 車輛和行人目標檢測系統介紹 深度學習在…

2023 年 亞太賽 APMCM 國際大學生數學建模挑戰賽 |數學建模完整代碼+建模過程全解全析

當大家面臨著復雜的數學建模問題時&#xff0c;你是否曾經感到茫然無措&#xff1f;作為2022年美國大學生數學建模比賽的O獎得主&#xff0c;我為大家提供了一套優秀的解題思路&#xff0c;讓你輕松應對各種難題。 cs數模團隊在亞太賽 APMCM前為大家提供了許多資料的內容呀&…