算法設計學習8

實驗目的及要求:
通過深入學習樹(Tree)和二叉樹(Binary Tree)這兩種重要的數據結構,掌握它們的基本概念、性質和操作,提高對樹形結構的理解和應用能力。通過本實驗,學生將深化對樹和二叉樹等數據結構的理解,提高編程能力和問題解決能力,為進一步學習復雜數據結構和算法打下基礎。

實驗設備環境:
1.微型計算機
2.DEV C++(或其他編譯軟件)

任務:
編寫程序,建立如圖 8-10(b) 所示的帶頭結點的二叉鏈存儲結構二叉樹,首先打印該二叉樹,然后分別輸出按照前序遍歷、中序遍歷和后序遍歷方法訪問各結點的信息,最后,查找字符'E是否在該二叉樹中。
[輸出顯示函數設計] 按照某種遍歷方法輸出二叉樹各結點的信息,其實就是把上述各遍歷二叉樹函數中的 Visit0 設計成輸出結點信息的函數。Visit0 設計如下:

void Visit(DataType item){
printf("%c",item);
}


[設計]
設二叉樹的結點定義以及帶頭結點二叉樹的初始化操作、左結點插入操作、右結點插入操作、左子樹刪除操作、右子樹刪除操作的實現函數存放在文件 BiTree.h 中,設二叉樹遍歷操作和撤銷操作的實現函數存放在文件 BiTreeTraverse.h 中。

代碼如下:

頭文件BiTree:#include<stdio.h>
#include<stdlib.h>
typedef char DataType;
typedef struct Node {DataType data;struct Node *leftChild;struct Node *rightChild;
} BiTreeNode;
void Initiate(BiTreeNode **root) {*root = (BiTreeNode*)malloc(sizeof(BiTreeNode));(*root)->leftChild = NULL;(*root)->rightChild = NULL;
}
BiTreeNode *InsertLeftNode(BiTreeNode *curr,DataType x) {BiTreeNode *s, *t;if(curr == NULL)return NULL;t = curr->leftChild;s = (BiTreeNode*)malloc(sizeof(BiTreeNode));s->data = x;s->leftChild = t;s->rightChild = NULL;curr->leftChild = s;return curr->leftChild;
}
BiTreeNode *InsertRightNode(BiTreeNode *curr,DataType x) {BiTreeNode *s, *t;if(curr == NULL)return NULL;t = curr->rightChild;s = (BiTreeNode*)malloc(sizeof(BiTreeNode));s->data = x;s->rightChild = t;s->leftChild = NULL;curr->rightChild = s;return curr->rightChild;
}
void Destroy(BiTreeNode **root) {if((*root) != NULL && (*root)->leftChild != NULL)Destroy(&(*root)->leftChild);if((*root) != NULL && (*root)->rightChild != NULL)Destroy(&(*root)->rightChild);free(*root);
}頭文件BiTreeTraverse:#include"BiTree.h"
void Visit(DataType item) {printf("%c ",item);
}
void PrintBiTree(BiTreeNode *root, int n) {int i;if(root == NULL)return;PrintBiTree(root->rightChild,n + 1);for(i = 0; i < n-1 ; i++)printf(" ");if(n>0) {printf("---");printf("%c\n",root->data);}PrintBiTree(root->leftChild,n + 1);
}
BiTreeNode *Search(BiTreeNode *root,DataType x) {BiTreeNode *find=NULL;if(root!=NULL) {if(root->data==x)find=root;else {find=Search(root->leftChild,x);if(find==NULL)find=Search(root->rightChild,x);}}return find;
}
void PreOrder(BiTreeNode *t,void Visit(DataType item)) {if(t != NULL) {Visit(t->data);PreOrder(t->leftChild, Visit);PreOrder(t->rightChild, Visit);}
}
void InOrder(BiTreeNode *t,void Visit(DataType item)) {if(t != NULL) {InOrder(t->leftChild, Visit);Visit(t->data);InOrder(t->rightChild, Visit);}
}
void PostOrder(BiTreeNode *t,void Visit(DataType item)) {if(t != NULL) {PostOrder(t->leftChild, Visit);PostOrder(t->rightChild, Visit);Visit(t->data);}
}8-2:#include"BiTreeTraverse.h"
int main() {BiTreeNode *root,*p,*find;char x='E';Initiate(&root);p=InsertLeftNode(root,'A');p=InsertLeftNode(p,'B');p=InsertLeftNode(p,'D');p=InsertRightNode(p,'G');p=InsertRightNode(root->leftChild,'C');InsertLeftNode(p,'E');InsertRightNode(p,'F');PrintBiTree(root,0);printf("前序遍歷:");PreOrder(root->leftChild,Visit);printf("\n中序遍歷:");InOrder(root->leftChild,Visit);printf("\n后序遍歷:");PostOrder(root->leftChild,Visit);find=Search(root,x);if(find!=NULL)printf("\n數據元素%c在二叉樹中",x);elseprintf("\n數據元素%c不在二叉樹中",x);Destroy(&root);return 0;
}

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

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

相關文章

P17_ResNeXt-50

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 一、模型結構 ResNeXt-50由多個殘差塊&#xff08;Residual Block&#xff09;組成&#xff0c;每個殘差塊包含三個卷積層。以下是模型的主要結構&#xff1…

【YOLO系列(V5-V12)通用數據集-剪刀石頭布手勢檢測數據集】

YOLO格式的剪刀石頭布手勢檢測數據集&#xff0c;適用于YOLOv5-v11所有版本&#xff0c;可以用于本科畢設、發paper、做課設等等&#xff0c;有需要的在這里獲取&#xff1a; 【YOLO系列&#xff08;V5-V12&#xff09;通用數據集-剪刀石頭布手勢檢測數據集】 數據集專欄地址&a…

基于連接池與重試機制的高效TDengine寫入方案

摘要 在時序數據庫應用場景中,如何構建穩定高效的寫入機制是核心挑戰。本文基于提供的Python代碼實現,解析一種結合連接池管理、智能重試策略和事務控制的TDengine寫入方案,并分析其技術優勢與優化方向。 一、代碼 from dbutils.pooled_db import PooledDB import timede…

抖音熱點視頻識別與分片處理機制解析

抖音作為日活數億的短視頻平臺,其熱點視頻識別和分片處理機制是支撐高并發訪問的核心技術。以下是抖音熱點視頻識別與分片的實現方案: 熱點視頻識別機制 1. 實時行為監控系統 用戶行為聚合:監控點贊、評論、分享、完播率等指標的異常增長曲線內容特征分析:通過AI識別視頻…

基于RDK X3的“校史通“機器人:SLAM導航+智能交互,讓校史館活起來!

視頻標題&#xff1a; 【校史館の新晉頂流】RDK X3機器人&#xff1a;導覽員看了直呼內卷 視頻文案&#xff1a; 跑得賊穩團隊用RDK X3整了個大活——給校史館造了個"社牛"機器人&#xff01; 基于RDK X3開發板實現智能導航與語音交互SLAM技術讓機器人自主避障不…

Metal學習筆記十三:陰影

在本章中&#xff0c;您將了解陰影。陰影表示表面上沒有光。當另一個表面或對象使對象與光線相遮擋時&#xff0c;您會看到對象上的陰影。在項目中添加陰影可使您的場景看起來更逼真&#xff0c;并提供深度感。 陰影貼圖 陰影貼圖是包含場景陰影信息的紋理。當光線照射到物體…

Matplotlib:數據可視化的藝術與科學

引言&#xff1a;讓數據開口說話 在數據分析與機器學習領域&#xff0c;可視化是理解數據的重要橋梁。Matplotlib 作為 Python 最流行的繪圖庫&#xff0c;提供了從簡單折線圖到復雜 3D 圖表的完整解決方案。本文將通過實際案例&#xff0c;帶您從基礎繪圖到高級定制全面掌握 …

Python數據可視化-第4章-圖表樣式的美化

環境 開發工具 VSCode庫的版本 numpy1.26.4 matplotlib3.10.1 ipympl0.9.7教材 本書為《Python數據可視化》一書的配套內容&#xff0c;本章為第4章 圖表樣式的美化 本章主要介紹了圖表樣式的美化&#xff0c;包括圖表樣式概述、使用顏色、選擇線型、添加數據標記、設置字體…

嵌入式海思Hi3861連接華為物聯網平臺操作方法

1.1 實驗目的 快速演示 1、認識輕量級HarmonyOS——LiteOS-M 2、初步掌握華為云物聯網平臺的使用 3、快速驅動海思Hi3861 WIFI芯片,連接互聯網并登錄物聯網平臺

如何在Redis容量限制下保持熱點數據

如何在Redis容量限制下保持熱點數據 當數據庫有100萬條數據但Redis只能保存10萬條時,需要智能的策略來確保Redis中存儲的都是最常訪問的熱點數據。以下是幾種有效的解決方案: 一、內存淘汰策略 Redis提供了多種內存淘汰機制,當內存不足時會自動刪除部分數據: 策略命令/配…

cv2.fillPoly()和cv2.polylines()

參數解釋 cv2.fillPoly() 和 cv2.polylines() 都是 OpenCV 的函數。功能是繪制多邊形&#xff0c;cv2.fillPoly()可繪制實心多邊形&#xff0c; cv2.polylines() 可繪制空心多邊形 cv2.fillPoly()用途&#xff1a;提取ROI 可在黑色圖像上&#xff0c;填充白色&#xff0c;作為…

數據庫--SQL

SQL&#xff1a;Structured Query Language&#xff0c;結構化查詢語言 SQL是用于管理關系型數據庫并對其中的數據進行一系列操作&#xff08;包括數據插入、查詢、修改刪除&#xff09;的一種語言 分類&#xff1a;數據定義語言DDL、數據操縱語言DML、數據控制語言DCL、事務處…

【python】速通筆記

Python學習路徑 - 從零基礎到入門 環境搭建 安裝Python Windows: 從官網下載安裝包 https://www.python.org/downloads/Mac/Linux: 通常已預裝&#xff0c;可通過終端輸入python3 --version檢查 配置開發環境 推薦使用VS Code或PyCharm作為代碼編輯器安裝Python擴展插件創建第…

批量刪除git本地分支和遠程分支命令

1、按照關鍵詞開頭匹配刪除遠程分支 git branch -r | grep "origin/feature/develop-1"| sed s/origin\///g | xargs -n 1 git push origin --delete git branch -r 列出所有遠端分支。 grep "origin/feature/develop-1" 模糊匹配分支名稱包含"orig…

上市電子制造企業如何實現合規的質量文件管理?

浙江潔美電子科技股份有限公司成立于2001年&#xff0c;是一家專業為片式電子元器件(被動元件、分立器件、集成電路及LED)配套生產電子薄型載帶、上下膠帶、離型膜、流延膜等產品的國家高新技術企業&#xff0c;主要產品有分切紙帶、打孔經帶、壓孔紙帶、上下膠帶、塑料載帶及其…

leetcode數組-有序數組的平方

題目 題目鏈接&#xff1a;https://leetcode.cn/problems/squares-of-a-sorted-array/ 給你一個按 非遞減順序 排序的整數數組 nums&#xff0c;返回 每個數字的平方 組成的新數組&#xff0c;要求也按 非遞減順序 排序。 輸入&#xff1a;nums [-4,-1,0,3,10] 輸出&#xff…

基于微信小程序的醫院掛號預約系統設計與實現

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術&#xff0c;讓傳統數據信息的管理升級為軟件存儲&#xff0c;歸納&#xff0c;集中處理數據信息的管理方式。本微信小程序醫院掛號預約系統就是在這樣的大環境下誕生&#xff0c;其可以幫助管理者在短時間內處理完畢龐大…

密碼學基礎——DES算法

前面的密碼學基礎——密碼學文章中介紹了密碼學相關的概念&#xff0c;其中簡要地對稱密碼體制(也叫單鑰密碼體制、秘密密鑰體制&#xff09;進行了解釋&#xff0c;我們可以知道單鑰體制的加密密鑰和解密密鑰相同&#xff0c;單鑰密碼分為流密碼和分組密碼。 流密碼&#xff0…

Redis分布式鎖詳解

Redis分布式鎖詳解 分布式鎖是在分布式系統中實現互斥訪問共享資源的重要機制。Redis因其高性能和原子性操作特性&#xff0c;常被用來實現分布式鎖。 一、基礎實現方案 1. SETNX EXPIRE方案&#xff08;基本版&#xff09; # 加鎖 SETNX lock_key unique_value # 設置唯…

創建Linux虛擬環境并遠程連接,finalshell自定義壁紙

安裝VMware 這里不多贅述。 掛載Linux系統 1). 打開Vmware虛擬機&#xff0c;打開 編輯 -> 虛擬網絡編輯器(N) 選擇 NAT模式&#xff0c;然后選擇右下角的 更改設置。 設置子網IP為 192.168.100.0&#xff0c;然后選擇 應用 -> 確定。 解壓 CentOS7-1.zip 到一個比較大…