數據結構初階:二叉樹的前中后序三種遍歷(遞歸的暴力美學)

想要實現二叉樹的遍歷可以創建一個鏈式結構的二叉樹

回顧一下二叉樹的概念,二叉樹分為空樹和非空二叉樹,非空二叉樹由根節點、根節點的左子樹和根節點的右子樹組成。

typedef char BTDataType;          // 數據類型
typedef struct BinaryTreeNode
{BTDataType data;struct BinaryTreeNode* left;  // 二叉樹的左節點struct BinaryTreeNode* right; // 二叉樹的右節點
}BTNode;

前中后序遍歷

1)前序遍歷(Preorder Traversal 亦稱先序遍歷):訪問根結點的操作發?在遍歷其左右?樹之前

訪問順序為:根結點、左?樹、右?樹

A- > B -> D?-> NULL -> NULL -> NULL -> C -> E -> NULL -> NULL -> F -> NULL -> NULL


2)中序遍歷(Inorder Traversal):訪問根結點的操作發?在遍歷其左右?樹之中(間)

訪問順序為:左?樹、根結點、右?樹

NULL -> D -> NULL -> B -> NULL -> A -> NULL -> E ->?NULL -> C -> NULL -> F -> NULL

3)后序遍歷(Postorder Traversal):訪問根結點的操作發?在遍歷其左右?樹之后

訪問順序為:左?樹、右?樹、根結點

NULL -> NULL -> D -> NULL -> B -> NULL -> NULL -> E -> NULL -> NULL -> F -> C -> A

創建節點

BTNode* ByeNode(BTDataType x)
{BTNode* root = (BTNode*)malloc(sizeof(BTNode));if (root == NULL){perror("malloc fail!");exit(1);}root->data = x;root->left = root->right = NULL;return root;
}BTNode* createBinaryTree()
{BTNode* rootA = ByeNode('A');BTNode* rootB = ByeNode('B');BTNode* rootC = ByeNode('C');BTNode* rootD = ByeNode('D');BTNode* rootE = ByeNode('E');BTNode* rootF = ByeNode('F');rootA->left = rootB;rootA->right = rootC;rootB->left = rootD;rootC->left = rootE;rootC->right = rootF;return rootA;
}

代碼實現前序遍歷

// 先序遍歷二叉樹——根左右
void preOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}printf("%c ", root->data);preOrder(root->left);preOrder(root->right);
}

畫了一個簡易的遞歸圖,原圖過長且太小了

中序遍歷代碼

// 中序遍歷二叉樹——左根右
void inOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}inOrder(root->left);printf("%c ", root->data);inOrder(root->right);
}

后序遍歷代碼

//后序遍歷二叉樹——左右根
void postOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}postOrder(root->left);postOrder(root->right);printf("%c ", root->data);
}

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

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

相關文章

WebUI問題總結

修改WebUI代碼時遇到的一些問題以及解決辦法 1. thttpd服務器環境的搭建 可參考《thttpd安裝與啟動流程》這一篇文章 其中遇到的問題有 thttpd版本問題:版本過舊會導致安裝失敗,盡量安裝新版本thttpd的啟動命令失敗的話要加上sudo修改文件權限&#…

【C++重點】deque

C queue 容器介紹 queue 是 C 標準庫中的一個容器適配器,它實現了先進先出(FIFO)數據結構。即,元素按照插入的順序排隊,首先插入的元素最先出隊。queue 適用于需要排隊處理任務的場景,比如消息隊列、任務調…

透過 /proc 看見內核:Linux 虛擬文件系統與 systemd 初始化初探

當我們在終端中輸入 ps、top、cat /proc/cpuinfo 等命令時,是否思考過這些信息來自哪里?為什么無需啟動任何守護進程,就能實時讀取系統負載、內存占用,甚至內核版本?這一切的答案,都藏在 Linux 系統中的一個…

操作系統(中斷 異常 陷阱) ─── linux第28課

目錄 1.硬件中斷 2. 時鐘中斷 3. OS本質 4. 軟件中斷 缺頁中斷?內存碎片處理?除零野指針錯誤? 操作系統本質總結 操作系統是對軟件硬件資源管理的軟件 1.硬件中斷 中斷向量表(IDT)就是操作系統的?部分,啟動就加載到內存中了…

文件分片上傳

1前端 <inputtype"file"accept".mp4"ref"videoInput"change"handleVideoChange"style"display: none;">2生成hash // 根據整個文件的文件名和大小組合的字符串生成hash值&#xff0c;大概率確定文件的唯一性fhash(f…

機器學習的一百個概念(5)數據增強

前言 本文隸屬于專欄《機器學習的一百個概念》&#xff0c;該專欄為筆者原創&#xff0c;引用請注明來源&#xff0c;不足和錯誤之處請在評論區幫忙指出&#xff0c;謝謝&#xff01; 本專欄目錄結構和參考文獻請見[《機器學習的一百個概念》 ima 知識庫 知識庫廣場搜索&…

基于微信小程序的智慧鄉村旅游服務平臺【附源碼】

基于微信小程序的智慧鄉村旅游服務平臺&#xff08;源碼L文說明文檔&#xff09; 目錄 4系統設計 4.1系統功能設計 4.2系統結構 4.3.數據庫設計 4.3.1數據庫實體 4.3.2數據庫設計表 5系統詳細實現 5.1 管理員模塊的實現 5.1.1旅游景點管理…

數據驅動的智能BMS革新:機器學習賦能電池健康預測與安全協同優化

傳統電池管理系統&#xff08;BMS&#xff09;依賴等效電路模型和固定參數算法&#xff0c;面臨電化學機理復雜、老化行為非線性、多工況適應性差等瓶頸。例如&#xff0c;健康狀態&#xff08;SOH&#xff09;和荷電狀態&#xff08;SOC&#xff09;估算易受溫度、循環次數及電…

使用JSON.stringify報錯:Uncaught TypeError: cyclic object value

具體錯誤 Uncaught TypeError: cyclic object valueonMouseOver Amap.vue:125renderMarker Amap.vue:84emit maps:1emit maps:1ci maps:1ui maps:1fireEvent maps:1jL maps:1Xt maps:1T maps:1<anonymous> amap.vue:49promise callback*nextTick runtime-core.esm-bundl…

Spring Boot 工程創建詳解

2025/4/2 向全棧工程師邁進&#xff01; 一、SpingBoot工程文件的創建 點擊Project Structure 然后按著如下點擊 最后選擇Spring Boot &#xff0c;同時記得選擇是Maven和jar&#xff0c;而不是war。因為Boot工程內置了Tomcat&#xff0c;所以不需要war。 緊接著選擇Spring We…

Java 8 的流(Stream API)簡介

Java 8 引入的 Stream API 是一個強大的工具&#xff0c;用于處理集合&#xff08;如 List、Set&#xff09;中的元素。它支持各種操作&#xff0c;包括過濾、排序、映射等&#xff0c;并且能夠以聲明式的方式表達復雜的查詢操作。流操作可以是中間操作&#xff08;返回流以便進…

4. Flink SQL訪問HiveCatalog

一. 實驗環境 Flink版本: 1.19.1 Hive版本: 2.1.3 Hadoop版本: 3.2.4二. 操作步驟 1.上傳所需的jar包到Flink lib目錄下 [roothadoop3 ~]# mv flink-sql-connector-hive-3.1.3_2.12-1.19.1.jar /www/flink-1.19.1/lib [roothadoop3 ~]# mv hadoop-mapreduce-client-core-3.2…

虛擬試衣間-云尚衣櫥小程序-衣櫥管理實現

衣櫥管理實現 目標 (Goal): 用戶 (User): 能通過 UniApp 小程序上傳衣服圖片。 后端 (Backend): 接收圖片,存到云存儲,并將圖片信息(URL、用戶ID等)存入數據庫。 用戶 (User): 能在小程序里看到自己上傳的所有衣服圖片列表。 技術棧細化 (Refined Tech Stack for this Pha…

HAL庫 通過USB Boot進行APP程序升級

硬件&#xff1a;stm32f407VET6芯片&#xff1b; 軟件&#xff1a;STM32CubeMx、Keil5 上位機&#xff1a;Dfuse DemoV3.06 這里給出通過在Bootlaoder中使用USB方式來更新APP程序的方法&#xff0c;首先我們編寫一個自己的bootloader&#xff0c;關于bootloader的大致原理可以…

數據庫權限獲取

1. into outfile&#xff08;手寫&#xff09; 1.1. 利用條件 ? web 目錄具有寫入權限&#xff0c;能夠使用單引號 ? 知道網站絕對路徑&#xff08;根目錄&#xff0c;或則是根目錄往下的目錄都行&#xff09; ? secure_file_priv 沒有具體值&#xff08;在 mysql/my.ini…

關于ESP系列MCU的UART download原理

GPIO0&#xff0c;即BOOT&#xff0c;工作模式選擇&#xff1a; 懸空/拉高&#xff1a;正常MCU啟動工作狀態 下拉接地&#xff1a;UARTDownload下載模式 如何進入UARTDownload下載模式&#xff1f; 先按下boot按鍵不放&#xff0c;再按下rst按鍵 / en按鍵&#xff0c;隨后釋放…

無需安裝Office進行 Word、Excel操作的微軟開發庫

微軟的確有一些無需安裝完整 Office 就能進行 Word、Excel 操作的開發庫&#xff0c;以下為你介紹&#xff1a; 1. Microsoft Graph API 簡介&#xff1a;Microsoft Graph API 是一個強大的 RESTful API&#xff0c;能讓開發者通過調用接口訪問 Office 365 服務里的各種資源&…

【一起來學kubernetes】34、ReplicaSet使用詳解

Kubernetes ReplicaSet 使用詳解 ReplicaSet 是 Kubernetes 中用于確保指定數量的 Pod 副本持續運行的核心控制器。它通過動態調整 Pod 副本數&#xff0c;保障應用的高可用性和彈性。以下是其核心功能、配置方法及最佳實踐&#xff1a; 一、ReplicaSet 核心作用 維持 Pod 副本…

【力扣hot100題】(034)LRU緩存

做完這題已經沒有任何力氣寫鏈表題了。 思路很簡單&#xff0c;就是調試特別的痛苦。 老是頻頻報錯&#xff0c;唉。 class LRUCache { public:struct ListNode{int key,val;ListNode* next; ListNode* prev;ListNode() : key(0), val(0), next(nullptr), prev(nullptr) {}L…

基于隨機森林算法的信用風險評估項目

引言 這是一個基于隨機森林算法的德國信用風險評估項目&#xff0c;主要目的是構建一個機器學習模型來評估德國客戶的信用風險&#xff0c;判斷客戶是否為高風險客戶。 # -*- coding: utf-8 -*- """ 德國信用風險評估隨機森林模型 """ # 基礎…