【C++】二叉樹和堆的鏈式結構

本篇博客給大家帶來的是用C++語言來實現堆鏈式結構和二叉樹的實現!

🐟🐟文章專欄:數據結構

🚀🚀若有問題評論區下討論,我會及時回答

??歡迎大家點贊、收藏、分享!

今日思想:你現在的懶惰將來你會買單的!

?上篇文章我們實現了二叉樹的堆的順序結構的實現具體內容請看這兩篇文章:【C++】樹和二叉樹的實現(上)-CSDN博客

【C++】樹和二叉樹的實現(下)-CSDN博客?

接下來我們實現二叉樹堆的鏈式結構?!

一、二叉樹堆的鏈式結構的定義

? ? ? ? 順序結構實現堆的底層是數組,那么鏈式結構的底層是鏈表。我們先定義鏈表的結構體。

代碼實例:

//Tree.h
//定義鏈式結構二叉樹
typedef char BTDataType;
typedef struct BinaryTreeNode
{BTDataType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right;
}BTNode;

二、二叉樹堆的鏈式結構的實現方法

? ? ? ? 二叉樹堆的鏈式結構的實現方法有:?前序遍歷、中序遍歷、后序遍歷、二叉樹結點個數、二叉樹葉子結點個數、二叉樹第k層結點個數、二叉樹查找值為x的結點、二叉樹的銷毀、層序遍歷、判斷二叉樹是否為完成二叉樹。

注意:這些方法的實現大部分都是遞歸的思想,即使不知道遞歸也沒事下面我會細說。

1、前序遍歷

? ? ? ??前序遍歷的規則:先遍歷根,再遍歷左子樹、最后遍歷右子樹。

遍歷順序:A->B->D->NULL->NULL->NULL->C->E->NULL->NULL->F->N->ULL->NULL? ? ?

注:大家可以根據遍歷順序來理解前序遍歷的規則。

代碼實例:

//Tree.h
//前序遍歷
void preOrder(BTNode* root);
//Tree.c
//前序遍歷-根左右
void preOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}printf("%c ", root->data);preOrder(root->left);preOrder(root->right);
}

?短短的幾行代碼就完成了前序遍歷,讓我們看看它是怎么實現的,如圖:

? ? ? ? ? 其他的代碼實現跟上圖的注釋一樣就不多寫了,包括后面實現的中序遍歷、后序遍歷等。

注:這張圖不太清楚大家可以下載,然后在電腦自帶的畫圖上放大就行。

?2、中序遍歷

? ? ? ? 中序遍歷的規則:先遍歷左子樹,再遍歷根結點、最后是右子樹。

遍歷順序:NULL->D->NULL->B->NULL->A->NULL->E->NULL->C->NULL->F->NULL?

代碼實例:

//Tree.h
//中序遍歷
void InOrder(BTNode* root);
//Tree.c
//中序遍歷——左根右
void InOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}postOrder(root->left);printf("%c ", root->data);postOrder(root->right);
}

3、后序遍歷

? ? ? ? 后序遍歷的規則:先遍歷左子樹,再遍歷右子樹、最后遍歷根結點。

遍歷順序:NULL->NULL->D->NULL->B->NULL->NULL->E->NULL->NULL->F->C->A?

代碼實例:

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

4、二叉樹結點個數

? ? ? ? 二叉樹結點個數=根結點+左子樹的結點個數+右子樹結點個數

注:只有一個根結點。

代碼實例:

//Tree.h
//二叉樹結點個數
int BinaryTreesize(BTNode* root);
//Tree.c
//二叉樹結點個數
int BinaryTreesize(BTNode* root)
{if (root == NULL){return 0;}return 1 + BinaryTreesize(root->left) + BinaryTreesize(root->right);
}

?由于時間的原因后面的實現方法放到下篇文章!!

完!!

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

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

相關文章

鴻蒙保姆級教學

鴻蒙(HarmonyOS)是華為推出的一款面向全場景的分布式操作系統,支持手機、平板、智能穿戴、智能家居、車載設備等多種設備。鴻蒙系統的核心特點是分布式架構、一次開發多端部署和高性能。以下是從入門到大神級別的鴻蒙開發深度分析&#xff0c…

關于Docker是否被淘汰虛擬機實現連接虛擬專用網絡Ubuntu 22.04 LTS部署Harbor倉庫全流程

1.今天的第一個主題: 第一個主題是關于Docker是否真的被K8S棄用,還是可以繼續兼容,因為我們知道在去年的時候,由于不可控的原因,docker的所有國內鏡像源都被Ban了,再加上K8S自從V1.20之后,宣布…

八股學習-JUC java并發編程

本文僅供個人學習使用,參考資料:JMM(Java 內存模型)詳解 | JavaGuide 線程基礎概念 用戶線程:由用戶空間程序管理和調度的線程,運行在用戶空間。 內核線程:由操作系統內核管理和調度的線程&…

遺傳算法+四模型+雙向網絡!GA-CNN-BiLSTM-Attention系列四模型多變量時序預測

遺傳算法四模型雙向網絡!GA-CNN-BiLSTM-Attention系列四模型多變量時序預測 目錄 遺傳算法四模型雙向網絡!GA-CNN-BiLSTM-Attention系列四模型多變量時序預測預測效果基本介紹程序設計參考資料 預測效果 基本介紹 基于GA-CNN-BiLSTM-Attention、CNN-BiL…

Linux怎樣源碼安裝Nginx

1. 安裝必要的依賴 在編譯 Nginx 之前,你需要安裝一些必要的依賴包,像編譯工具和庫文件等。以 CentOS 系統為例,可借助yum命令來安裝: bash sudo yum install -y gcc pcre-devel zlib-devel openssl-devel要是使用的是 Ubuntu 系…

【入門初級篇】報表基礎操作與功能介紹

【入門初級篇】報表的基本操作與功能介紹 視頻要點 (1)報表組件的創建 (2)指標組件的使用:一級、二級指標操作演示 (3)表格屬性設置介紹 (4)圖表屬性設置介紹 &#xff0…

【新能源汽車“心臟”賦能:三電系統研發、測試與應用匹配的恒壓恒流源技術秘籍】

新能源汽車“心臟”賦能:三電系統研發、測試與應用匹配的恒壓恒流源技術秘籍 在新能源汽車蓬勃發展的浪潮中,三電系統(電池、電機、電控)無疑是其核心驅動力。而恒壓源與恒流源,作為電源管理的關鍵要素,在…

在線JSON格式校驗工具站

在線JSON校驗格式化工具(Be JSON)在線,JSON,JSON 校驗,格式化,xml轉json 工具,在線工具,json視圖,可視化,程序,服務器,域名注冊,正則表達式,測試,在線json格式化工具,json 格式化,json格式化工具,json字符串格式化,json 在線查看器,json在線,json 在線驗…

圖片黑白處理軟件推薦

圖片黑白二值化是一款小巧實用的圖片處理軟件,軟件大小僅268K。 它的操作極其簡單,用戶只需將需要處理的圖片直接拖入軟件,就能實現圖片漂白效果。 從原圖和處理后的圖片對比來看,效果顯著。這種圖片漂白處理在打印時能節省墨水&a…

【AI知識】常見的優化器及其原理:梯度下降、動量梯度下降、AdaGrad、RMSProp、Adam、AdamW

常見的優化器 梯度下降(Gradient Descent, GD)局部最小值、全局最小值和鞍點凸函數和非凸函數動量梯度下降(Momentum)自適應學習率優化器AdaGrad(Adaptive Gradient Algorithm)?RMSProp(Root M…

1.5.5 掌握Scala內建控制結構 - 異常處理

本次實戰聚焦于Scala內建控制結構中的異常處理機制。通過具體案例演示了如何使用try-catch-finally結構來處理程序運行中可能出現的異常情況。在try塊中調用可能拋出異常的方法,catch塊則根據不同異常類型進行捕獲并處理,finally塊則無論是否發生異常都會…

信息系統運行管理員教程4--信息系統軟件運維

第四章 信息系統軟件運維 信息系統軟件是信息系統運行的核心,其運維的目的是保證信息系統軟件能正常而可靠地運行,并能使系統不斷得到改善和提高,以充分發揮作用。 第1節 信息系統軟件運維概述 1.信息系統軟件運維的概念 信息系統軟件運維…

以光盤讀寫系統演示面向對象設計的原則與方法

面向對象設計(OOD)是軟件開發中的核心方法,強調通過對象、類、繼承、封裝和多態等概念來構建系統。以下是面向對象設計的原則、方法及常用技術手段: 一、面向對象設計原則(SOLID原則) 單一職責原則&#x…

齒輪熱處理學習筆記分享

對于一個做冷加工的人來說,熱處理是一個神秘的話題,但是一點都不去了解的話,工作也無法進行。所以抽點時間來學習一下齒輪熱處理相關的內容,做成筆記分享給愛學習的小伙伴們,文章較長,需要一些耐心去閱讀&a…

WPF 布局舍入(WPF 邊框模糊 或 像素錯位 的問題)

1. 什么是 WPF 布局舍入? 在 WPF 開發過程中,可能會遇到界面模糊、邊框錯位、文本渲染不清晰等問題。這些現象通常是由于 WPF 采用 設備無關像素(DIP, Device Independent Pixels),在不同 DPI 設置下,UI 元…

Linux中vscode編程,小白入門喂飯級教程

確保Ubuntu聯網 因為后面安裝VScode需要從互聯網下載。 安裝GCC 在桌面空白處右鍵->打開終端 執行命令:gcc -v 在最后一行可以看到gcc version 7.5.0 如果提示Command ‘gcc’ not found,就查一下如何安裝gcc,先把gcc安裝好。 安裝VS…

Python 的 ?ORM(Object-Relational Mapping)工具淺講

SQLAlchemy相關講解 1. SQLAlchemy 是什么? ?定義:一個 Python 的 ?ORM(Object-Relational Mapping)工具,允許開發者通過 Python 類與對象操作數據庫,而非直接編寫 SQL。?核心組件: ?Core:底層 SQL 表達式語言,提供數據庫無關的 SQL 操作接口。?ORM:基于 Core …

藍橋杯真題——洛谷Day13 找規律(修建灌木)、字符串(乘法表)、隊列(球票)

目錄 找規律 P8781 [藍橋杯 2022 省 B] 修剪灌木 字符串 P8723 [藍橋杯 2020 省 AB3] 乘法表 隊列 P8641 [藍橋杯 2016 國 C] 贏球票 找規律 P8781 [藍橋杯 2022 省 B] 修剪灌木 思路:對某個特定的點來說有向前和向后的情況,即有向前再返回到該位置…

matrix-breakout-2-morpheus 靶機----練習攻略 【僅獲取shell】

【此練習僅做到反彈shell】 1.靶機下載地址 https://download.vulnhub.com/matrix-breakout/matrix-breakout-2-morpheus.ova 2. 打開靶機,kali使用nmap掃描同C段的主機 找到靶機ip 確保靶機和kali網卡均為NAT模式 先查看kali的ip nmap 192.168.182.1/24 …

Flutter中Align的使用說明

又失業了,作為一個高齡Android程序員今年找工作真難呀。現在Flutter是必需技能了,所以最近在自學。所用書籍叫《Flutter實戰》,如下 如今已看了100多頁,發現這本書寫得……有點趕吧,好幾處講得不清不楚,而關…