鏈式二叉樹的基本操作——遍歷

本文筆者將帶領讀者一起學習鏈式二叉樹的一些基本語法,至于更難一些的插入刪除等,筆者將在后續C++更新后再次詳細帶領大家學習。

首先,在進行二叉樹之前,我們需要一顆二叉樹,而二叉樹的初始化現階段實現不太現實,故筆者在此處手動建一個二叉樹:由于現在不是堆了,所以用數組顯然是不行,這時候我們直接用鏈表存儲即可,也就是鏈式二叉樹:

如上圖,首先初始化了一個節點,然后兩個指針分別指向左子樹和右子樹,然后手動賦值即可,最終的二叉樹長這樣:

? ? ? ? 1
? ? ? ?/ \
? ? ? 2 ? 4
? ? ?/ ? / \
? ? 3 ? 5 ? 6
? ? ? ? ?\
? ? ? ? ? 7

下面我們只對這個二叉樹進行討論,首先進行遍歷,二叉樹的遍歷有三次,分別是:前序遍歷,中序遍歷,后序遍歷。

前序遍歷:根節點,左子樹,右子樹。由于三種遍歷方式本質一樣,筆者在此著重講一下第一種遍歷方式。首先,根據這棵樹,我們可以借用遞歸的思想,不過這里有一個易錯點,那就是左(右)子樹是空節點時仍然存在這種情況,這里筆者記作N,一定不能忽略這種情況,比如筆者創建的這棵樹,如果按照前序遍歷,那就是1 (2 (3?N N) N)( 4 (5 N (7 N N))( 6 N N))不難理解,這其實是一種遞歸的思想,不斷推進,直到遇到了N(空結點),剩下情況一直保證先根在左最后右,這是邏輯角度,下面從代碼的角度來分析:

這就是一個前序遍歷的代碼實現,其實不難理解,這就是用了遞歸思想,函數棧幀的知識,因為本質上就是棧幀的調用,在具體進行時,首先需要讓左子樹處理完,在這之后才能進行右子樹,每個二叉樹都是如此進行,具體可以看下圖:

左圖有些問題,不過無傷大雅,思路就是如此,最后再main函數調用一下即可:

中序遍歷:左子樹,根節點,右子樹

? ? ? ? 1
? ? ? ?/? \
? ? ? 2 ? 4
? ? ?/? ? /? ? \
? ? 3 ? 5 ? 6
? ? ? ? ? \
? ? ? ? ? ?7

中序遍歷和前序遍歷的情況基本一致,并無不同,中序遍歷結果:((N 3 N)?2??N )1 ((N? 5 (N 7 N )))4? (N 6 N))

代碼自然也是類似的:

這里不作過多解釋,相信讀者都能理解。

后序遍歷:左子樹,右子樹,根節點

N N 3 N 2 N N 7 N 5 N N 6 4 1
下面直接看代碼:

到這里,三種遍歷方式其實已經結束,最后,筆者給大家看一下打印的結果:?

ok,到這里筆者就結束了,筆者把源碼放在GitHub上了,希望大家給一個星星:

https://github.com/z-yi-han/Fundamentals-of-Data-Struct/tree/main/Tree

筆者還會持續更新,希望大家支持,非常感謝各位讀者


?

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

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

相關文章

Windows運維之以一種訪問權限不允許的方式做了一個訪問套接字的嘗試

一、問題場景 在Windows 上運維服務過程中,經常會遇到運行服務,部署安裝時候無任何問題,后續再某個特殊時間點,突然服務無法啟動了。再次啟動時,提示端口占用與以一種訪問權限不允許的方式做了一個訪問套接字的嘗試。 …

2020/12 JLPT聽力原文 問題二 3番

3番:レストランで、女の人と店長が話しています。店長はサラダについて、どんなアドバイスをしていますか。女:店長、この前話してた新しいランチメニューのサラダを作ってみたんですが、どうでしょうか。 男:ああ、サラダだけで満足できるっ…

芯片行業主要廠商

作為一個小白,每次淘寶買芯片時看到相似的命名規則:“OPA、AD、LT、MAX”等等時,我不禁好奇這些芯片行業大廠有哪些,所以查了些資料: 1. 德州儀器(Texas Instruments, TI) 公司概況&#xff1…

【BLE系列-第四篇】從零剖析L2CAP:信道、Credit流控、指令詳解

目錄 引言 一、L2CAP主要功能 二、L2CAP幀格式及信道概念 2.1 邏輯鏈路是什么? 2.2 邏輯信道的作用 2.3 L2CAP幀格式介紹 三、L2CAP信令信道 3.1 信令信道幀格式說明 3.2 信令信道指令介紹 3.2.1 信令信道指令一覽表 3.2.2 Credit流控規則 引言 在BLE協…

CSS保持元素寬高比,固定元素寬高比

方法一&#xff1a; <div class"hcp-fixed-aspect-ratio-box">這里是正文內容 </div>.hcp-fixed-aspect-ratio-box {width: 50%;color: #FFFFFF;margin: 100px auto;background: #FF0000;/* 寬高比2:1&#xff0c;兼容性可能不太好 */aspect-ratio: 2 / …

數據分析小白訓練營:基于python編程語言的Numpy庫介紹(第三方庫)(上篇)

&#xff08;一&#xff09;Numpy庫的安裝安裝指定版本的Numpy庫&#xff0c;打開命令提示符&#xff0c;輸入下圖內容&#xff0c;只需要將1.25.5的版本修改成個人需要的版本&#xff0c;然后按下回車鍵&#xff0c;numpy庫就安裝在python中&#xff1a;指定版本numpy庫安裝可…

從 Windows 到 Linux 服務器的全自動部署教程(免密登錄 + 壓縮 + 上傳 + 啟動)

一、準備工作 1. 環境說明 本地開發環境&#xff1a;Windows 服務器&#xff08;需執行部署腳本&#xff09;目標服務器&#xff1a;Linux 服務器&#xff08;需安裝 node.js、pm2、unzip&#xff09;核心工具&#xff1a;7-Zip&#xff08;壓縮&#xff09;、OpenSSH&#x…

智能汽車領域研發,復用云原始開發范式?

汽車電子電氣架構演進趨勢&#xff1a;分散的功能ECU -> 域控制器 -> 中央計算服務器汽車電子方案與架構在發展與迭代時會使用虛擬化方法幾種可行的軟硬一體化方案&#xff1a;多ECU&#xff0c;硬件隔離&#xff0c;硬件分區&#xff0c;車規級多核硬件架構 Hypervisor…

數據電臺詢價的詢價要求

技術規格及主要參數 1.電臺基本要求&#xff1a; 1.1 電臺中的信號處理基于FPGA設計&#xff0c;采用FPGAARM高速AD/DA設計架構&#xff1b; 1.2 具備頻譜感知、自主選頻、跳頻、擴頻等功能&#xff1b; 1.3 具備鏈路質量信息、自組網路由信息、電池電壓監測信息、北斗定位信息…

IoT/HCIP實驗-5/基于WIFI的智慧農業實驗(LwM2M/CoAP+PSK+ESP8266 連接到 IoTDA)

文章目錄概述WIFI8266 通信模組WIFI模組也用AT指令&#xff1f;ESP8266 內置協議棧?支持的無線網絡模式MCU通過串口與模組交互Wifi模組做客戶端PC-AT接入路由器向本地TCP服務發數據用代碼接入你家路由器已接入AP&#xff08;你家Wifi&#xff09;平臺側開發工程配置和編譯工程…

定時器輸出PWM波配置(呼吸燈)

使用定時器 4 通道 3 生成 PWM 波控制 LED1 &#xff0c;實現呼吸燈效果。 頻率&#xff1a;2kHz&#xff0c;PSC71&#xff0c;ARR499pwm.c:#include "pwm.h" // 本模塊頭文件&#xff1a;應聲明 pwm_init/pwm_compare_set 等原型、并包含 HAL 頭//&#xff08;示…

[ai-agent]環境簡介之沙盒e2b vs daytona

所謂的環境的就是agent運行在哪里&#xff0c;或者是agent和那里進行交互。 最常見的環境就是本地開發環境&#xff0c;也就是個人主機&#xff0c;但是存在問題就是沒有辦法出網和橫向擴展。 在沙盒之前也是有其他選擇的&#xff1a; 云服務器&#xff0c; 虛擬機&#xff0c;…

【前端面試題】前端面試知識點(第三十一題到第六十一題)

三十一. CSS實現垂直水平居中 實現元素的垂直水平居中是前端開發中的常見需求,主要有以下幾種思路: text-align + line-height實現單行文本水平垂直居中 適用于單行文本元素,通過text-align: center實現水平居中,line-height等于容器高度實現垂直居中 text-align + vertic…

嵌入式練習項目——————抓包獲取天氣信息

一、內容 嘗試通過實時天氣接口 - 數據接口 - NowAPI此網站獲取天氣信息&#xff0c;實現可以發送城市查詢當前天氣和未來天氣 二、獲取請求報文 可以根據測試示例看到獲取內容&#xff0c;此時數據是cJSON格式&#xff0c;我們首先要通過合適的網址抓包獲取到請求報文&#x…

Python爬蟲實戰:研究NewsCrawl ,構建新浪和網易新聞數據采集系統

1. 引言 1.1 研究背景與意義 在信息時代,新聞作為社會動態、公眾觀點的重要載體,其傳播速度與影響力持續擴大。傳統的人工篩選與采集方式已無法滿足對海量新聞數據的高效處理需求,亟需自動化工具實現大規模、結構化的新聞數據采集。網絡爬蟲技術作為一種按照預設規則自動抓…

PyTorch神經網絡工具箱全解析:nn.Module vs nn.functional

&#x1f50d; 為何需要神經網絡工具箱&#xff1f; 在僅用 Autograd 和 Tensor 實現模型時&#xff0c;開發者需手動設置參數梯度&#xff08;requires_gradTrue&#xff09;、反向傳播&#xff08;backward()&#xff09;及梯度提取&#xff0c;過程繁瑣且易出錯。nn 工具箱應…

Java注解學習記錄

目錄 一、為什么要學注解&#xff1f; 二、注解是什么&#xff1f; 三、為什么要使用注解&#xff1f; 四、注解的作用 五、注解的分類 5.1 元注解 Retention&#xff08;/ r??ten?(?)n /&#xff09; ★★★★★ Target ★★★★★ Inherited(/ ?n?her?t?d /…

43.安卓逆向2-補環境-使用unidbg(使用Smali語法調用方法和使用方法地址調用方法)

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 內容參考于&#xff1a;圖靈Python學院 工具下載&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取碼&#xff1…

【Kubernetes知識點問答題】Pod 調度

1. 如何將特定 Pod 調度到指定的節點&#xff1f;可以使用下列方法中的任何一種來選擇 K8s 對特定 Pod 的調度&#xff1a;① 與節點標簽匹配的 nodeSelector&#xff1a;在 Pod 的規范中使用 nodeSelector 字段來指定節點標簽&#xff0c;以便將 Pod 調度到具有特定標簽的節點…

wordpress顯示時間日期的幾種常見的方式

在WordPress中&#xff0c;顯示時間日期有多種常見方式&#xff0c;包括使用默認設置、模板標簽、插件等&#xff0c;以下是詳細介紹&#xff1a; 使用默認設置 WordPress的默認設置允許你在文章列表中顯示文章的發布時間。登錄到WordPress后臺&#xff0c;在“設置”中找到“…