【數據結構】二叉樹篇| 綱領思路02+刷題

在這里插入圖片描述

  • 博主簡介:努力學習的22級計算機科學與技術本科生一枚🌸
  • 博主主頁: @是瑤瑤子啦
  • 每日一言🌼: 所謂自由,不是隨心所欲,而是自我主宰。——康德

目錄

  • 一、前言
  • 二、刷題
    • 1、翻轉二叉樹
  • 2、二叉樹的層序遍歷?
  • 3、 二叉樹展開為鏈表

一、前言

二叉樹的刷題思路和綱領在這篇:【數據結構】二叉樹篇| 綱領&思路01+刷題已經給出,這篇主要還是刷題,進行鞏固

🍊 不過新增了“二叉樹的層序遍歷”(第二題),我個人暫時認為它不屬于前面所講綱領兩個模式的任何一個,所以我將它單獨提出來。

二、刷題

1、翻轉二叉樹

🔗226. 翻轉二叉樹

在這里插入圖片描述

  • 👧🏻思路:分解成子問題,根節點的左子樹 = 根節點右子樹翻轉后;根節點的右子樹 = 根節點右子樹翻轉后
  • 🙇🏻?♀?代碼:
// 定義:將以 root 為根的這棵二叉樹翻轉,返回翻轉后的二叉樹的根節點
TreeNode invertTree(TreeNode root) {if (root == null) {return null;}// 利用函數定義,先翻轉左右子樹TreeNode left = invertTree(root.left);TreeNode right = invertTree(root.right);// 然后交換左右子節點root.left = right;root.right = left;// 和定義邏輯自恰:以 root 為根的這棵二叉樹已經被翻轉,返回 rootreturn root;
}

2、二叉樹的層序遍歷?

🔗116. 填充每個節點的下一個右側節點指針
在這里插入圖片描述
在這里插入圖片描述

public Node connect(Node root) {if(root == null){return root;}Queue<Node> q = new LinkedList<>();//創建一個輔助隊列q.offer(root);while(!q.isEmpty()){int size = q.size();//當前層次的節點個數for(int i = 0; i < size; size--){//遍歷這一層節點Node cur = q.poll();//連接next節點if(i < size-1){cur.next = q.peek();}if(cur.left!= null){q.offer(cur.left);}if(cur.right!=null){q.offer(cur.right);}}}return root;}

3、 二叉樹展開為鏈表

🔗114. 二叉樹展開為鏈表

  • 👧🏻思路:后續遍歷!在后序位置進行連接即可
    在這里插入圖片描述

至于如何把 root 的左右子樹拉平,不用你操心,flatten 函數的定義就是這樣,交給他做就行了。

 public void flatten(TreeNode root) {if(root == null){return;}//1、先將左右子樹拉平flatten(root.left);flatten(root.right);/****后序遍歷位置****/// 左右子樹已經被拉平成一條鏈表TreeNode left = root.left;TreeNode right = root.right;//2進行連接,先把root和left連接成一個鏈表root.left = null;root.right = left;//3、將原先的右子樹接到當前右子樹的末端TreeNode p = root;while(p.right!=null){p = p.right;}p.right = right;}

💐若有不懂的地方,歡迎隨時在評論區or私信找瑤瑤子交流討論🌺

在這里插入圖片描述

  • Java島冒險記【從小白到大佬之路】

  • LeetCode每日一題–進擊大廠

  • Go語言核心編程

  • 算法

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

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

相關文章

線性代數再回顧

最近&#xff0c;在深度學習線性代數&#xff0c;之前大一的時候學過線性代數&#xff0c;但那純屬于是應試用的&#xff0c;考試一考完&#xff0c;啥都忘了&#xff0c;也說出不出個所以然&#xff0c;所以&#xff0c;在B站的MIT的線性代數以及3blue1brown線性代數的本質中去…

git命令使用

君子拙于不知己,而信于知己。——司馬遷 清屏&#xff1a;clear 查看當前面板的路徑&#xff1a;pwd 查看當前面板的文件&#xff1a;ls 創建文件夾&#xff1a;mkdir 文件夾名 創建文件&#xff1a;touch 文件名 刪除文件夾&#xff1a;rm -rf 文件夾名 刪除文件&#xff1a;r…

Remote Sensing,2023 | 基于SBL的分布式毫米波相干雷達成像的高效實現

Remote Sensing,2023 | 基于SBL的分布式毫米波相干雷達成像的高效實現 注1&#xff1a;本文系“無線感知論文速遞”系列之一&#xff0c;致力于簡潔清晰完整地介紹、解讀無線感知領域最新的頂會/頂刊論文(包括但不限于 Nature/Science及其子刊; MobiCom, Sigcom, MobiSys, NSDI…

爬蟲IP時效問題:優化爬蟲IP使用效果實用技巧

目錄 1. 使用穩定的代理IP服務提供商&#xff1a; 2. 定期檢測代理IP的可用性&#xff1a; 3. 配置合理的代理IP切換策略&#xff1a; 4. 使用代理IP池&#xff1a; 5. 考慮代理IP的地理位置和速度&#xff1a; 6. 設置合理的請求間隔和并發量&#xff1a; 總結 在爬蟲過…

python知識:什么是字符編碼?

前言 嗨嘍&#xff0c;大家好呀~這里是愛看美女的茜茜吶 我們的MySQL使用latin1的默認字符集&#xff0c; 也就是說&#xff0c;對漢字字段直接使用GBK內碼的編碼進行存儲&#xff0c; 當需要對一些有漢字的字段進行拼音排序時&#xff08;特別涉及到類似于名字這樣的字段時…

Docker網絡與資源控制

一、Docker 網絡實現原理 Docker使用Linux橋接&#xff0c;在宿主機虛擬一個Docker容器網橋(docker0)&#xff0c;Docker啟動一個容器時會根據Docker網橋的網段分配給容器一個IP地址&#xff0c;稱為Container-IP&#xff0c;同時Docker網橋是每個容器的默認網關。因為在同一宿…

Oracle外部表ORACLE_LOADER方式加載數據

當數據源為文本或其它csv文件時&#xff0c;oracle可通過使用外部表加載數據方式&#xff0c;不需要導入可直接查詢文件內的數據。 1、如下有一個文件名為&#xff1a;test1.txt 的數據文件。數據文件內容為&#xff1a; 2、使用sys授權hr用戶可讀寫 DATA_PUMP_DIR 目錄權限&a…

探索未來:元宇宙與Web3的無限可能

隨著科技的奇跡般發展&#xff0c;互聯網已經成為了我們生活的不可分割的一部分。然而&#xff0c;盡管它的便利性和普及性帶來了巨大的影響&#xff0c;但我們仍然面臨著傳統互聯網體驗的諸多限制。 購物需要不斷在實體店與電商平臺間切換&#xff0c;教育依然受制于時間與地…

Unity如何把游戲導出成手機安裝包

文章目錄 前言使用環境步驟添加場景構建APK 前言 本文章主要演示了&#xff0c;如何將制作好的游戲&#xff0c;導出成APK&#xff0c;安裝到手機上。 使用環境 Unity2022。 步驟 首先打開你的項目&#xff0c;然后選擇菜單欄的“File” > “Build Settings…”&#xf…

QMainwindow窗口

QMainwindow窗口 菜單欄在二級菜單中輸入中文的方法給菜單欄添加相應的動作使用QMenu類的API方法添加菜單項分隔符也是QAction類 工具欄添加工具欄在狀態欄中添加控件工具欄添加其他類型的工具工具欄的屬性添加多個工具欄使用窗口添加使用代碼添加 狀態欄常用API在狀態欄顯示信…

NeuralNLP-NeuralClassifier的使用記錄(一),訓練預測自己的【英文文本多分類】

NeuralNLP-NeuralClassifier的使用記錄&#xff0c;訓練預測自己的英文文本多分類 NeuralNLP-NeuralClassifier是騰訊開發的一個多層多分類應用工具&#xff0c;支持的任務包括&#xff0c;文本分類中的二分類、多分類、多標簽&#xff0c;以及層次多標簽分類。支持的文本編碼…

C語言庫函數之 qsort 講解、使用及模擬實現

引入 我們在學習排序的時候&#xff0c;第一個接觸到的應該都是冒泡排序&#xff0c;我們先來復習一下冒泡排序的代碼&#xff0c;來作為一個鋪墊和引入。 代碼如下&#xff1a; #include<stdio.h>void bubble_sort(int *arr, int sz) {int i 0;for (i 0; i < sz…

面試熱題(最大子數組和)

給你一個整數數組 nums &#xff0c;請你找出一個具有最大和的連續子數組&#xff08;子數組最少包含一個元素&#xff09;&#xff0c;返回其最大和。 子數組 是數組中的一個連續部分。 輸入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 輸出&#xff1a;6 解釋&#xff1a;連續…

免費批量ppt轉pdf?一個方法教你完美轉換

隨著科技的不斷發展&#xff0c;電子文檔的使用越來越普遍。在商業、教育和個人領域&#xff0c;我們經常需要將PPT文件轉換為PDF格式&#xff0c;以便更方便地共享和存檔。幸運的是&#xff0c;現在有許多在線工具和軟件可以幫助我們輕松地完成免費批量ppt轉pdf。下面將介紹一…

【Linux】模擬實現linux的shell

#include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <sys/wait.h> #include <sys/types.h> #define NUM 1024 #define SIZE 32 #define SEP " " int main() {//保存輸入后的字符串char …

Blazor前后端框架Known-V1.2.12

V1.2.12 Known是基于C#和Blazor開發的前后端分離快速開發框架&#xff0c;開箱即用&#xff0c;跨平臺&#xff0c;一處代碼&#xff0c;多處運行。 Gitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;https://github.com/known/Known 概述 基于C#和Blazo…

大文件切片上傳

創建組件&#xff1a;創建一個組件用于處理文件上傳&#xff0c;命名為Upload.vue。 <template><div><input type"file" change"handleFileChange" /><button click"startUpload">開始上傳</button></div> …

Pyinstaller 打包 django 項目如何將命令行參數加入?

起因 Pyinstaller 打包 django 項目&#xff0c;打包成 manage.exe 后用命令行 cmd manage.exe runserver 0.0.0.0:8001 --noreload 來運行感覺很不方便。 希望能夠直接把命令行參數也打包進去&#xff0c;直接運行 exe 。我走了些彎路&#xff0c;但最終實現了。 彎路 我看…

Redis之刪除策略

文章目錄 前言一、過期數據二、數據刪除策略2.1定時刪除2.2惰性刪除2.3 定期刪除2.4 刪除策略比對 三、逐出算法3.1影響數據逐出的相關配置 總結 前言 Redis的常用刪除策略 一、過期數據 Redis是一種內存級數據庫&#xff0c;所有數據均存放在內存中&#xff0c;內存中的數據可…

web基礎入門和PHP語言基礎入門 一

web基礎入門和php語言基礎入門 一 WEB簡介與HTTP入門WEB簡介HTTP 簡介HTTP 請求報文&#xff1a;請求方法&#xff1a;請求頭部&#xff1a;&#xff08;常見的請求頭&#xff09;HTTP 響應報文&#xff1a;響應狀態碼&#xff1a;Cookie HTML入門學習什么是HTML什么是標記語言…