




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)報(bào)告 題目:二叉樹(shù)染色問(wèn)題 學(xué)生姓名 學(xué)生學(xué)號(hào) 學(xué)院名稱(chēng) 計(jì)算機(jī)學(xué)院 專(zhuān) 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 時(shí) 間 2014.10.22 目 錄 第一章 需求分析11.1 原題表述11.2 問(wèn)題解決方案1 第二章 概要設(shè)計(jì)22.1 抽象數(shù)據(jù)類(lèi)型22.2 主要算法分析22.3 主要算法描述3 第三章 詳細(xì)設(shè)計(jì)43.1 程序代碼4 第四章 調(diào)試分析74.1 出現(xiàn)的問(wèn)題及解決方法7 第五章 測(cè)試分析85.1 測(cè)試樣例8 I計(jì)算機(jī)學(xué)院2013級(jí)數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)報(bào)告第1章 需求分析1.1 原題表述一棵二叉樹(shù)可以按照如下規(guī)則表示成一個(gè)由0、1、2組成的字符序列,我們稱(chēng)之為“二叉樹(shù)序列S”:例如,下圖所
2、表示的二叉樹(shù)可以用二叉樹(shù)序列S=21200110來(lái)表示現(xiàn)在要對(duì)一棵二叉樹(shù)的節(jié)點(diǎn)進(jìn)行染色。每個(gè)節(jié)點(diǎn)可以被染成紅色、綠色或藍(lán)色。并且,一個(gè)節(jié)點(diǎn)與其子節(jié)點(diǎn)的顏色必須不同,如果該節(jié)點(diǎn)有兩個(gè)子節(jié)點(diǎn),那么這兩個(gè)子節(jié)點(diǎn)的顏色也必須不相同。給定一棵二叉樹(shù)的二叉樹(shù)序列,請(qǐng)求出這棵樹(shù)中最多和最少有多少個(gè)點(diǎn)能夠被染成綠色。1.2 問(wèn)題解決方案1.根據(jù)輸入的二叉樹(shù)序列構(gòu)建二叉樹(shù),規(guī)定:當(dāng)一個(gè)結(jié)點(diǎn)只有一個(gè)孩子時(shí),令其為左孩子當(dāng)n = 0時(shí)表示葉結(jié)點(diǎn);當(dāng)n = 1時(shí)表示左孩子當(dāng)n = 2時(shí)表示兩個(gè)孩子2.為二叉樹(shù)染色,以subroot為根結(jié)點(diǎn),color表示當(dāng)前顏色,modle表示當(dāng)前結(jié)點(diǎn)左右染色的兩種情況(例如,當(dāng)前結(jié)
3、點(diǎn)為綠色,其左右孩子的染色情況為 左紅右藍(lán) 或 左藍(lán)右紅 兩種情況),遞歸左子樹(shù),右子樹(shù)。3.中序遍歷二叉樹(shù),記錄綠色節(jié)點(diǎn)的數(shù)目,保存數(shù)據(jù)。4.比較數(shù)據(jù),輸出最大值,最小值。第二章 概要設(shè)計(jì)2.1 抽象數(shù)據(jù)類(lèi)型ADT BinaryTree數(shù)據(jù)對(duì)象D:D是具有相同特性的數(shù)據(jù)元素的集合數(shù)據(jù)關(guān)系R: 若D,則R=H,H是如下二元關(guān)系; (1)在D中存在惟一的稱(chēng)為根的數(shù)據(jù)元素root,它在關(guān)系H下無(wú)前驅(qū); (2)若D-root,則存在D-root=D1,Dr,且D1Dr =; (
4、3)若D1,則D1中存在惟一的元素x1,<root,x1>H,且存在D1上的關(guān)系H1 H;若Dr,則Dr中存在惟一的元素xr,<root,xr>H,且存在上的關(guān)系Hr H;H=<root,x1>,<root,xr>,H1,Hr; (4)(D1,H1)是一棵符合本定義的二叉樹(shù),稱(chēng)為根的左子樹(shù);(Dr,Hr)是一棵符合本定義的二叉樹(shù),稱(chēng)為根的右子樹(shù)。 基本操作:CreatTree()操作結(jié)果:構(gòu)造二叉樹(shù)。InorderTraverse(T)初始條件:二叉樹(shù)T存在。操作結(jié)果:中序遍歷二叉樹(shù)Co
5、lor(struct node *subroot,string color,int modle)初始條件:二叉樹(shù)已存在操作結(jié)果:為二叉樹(shù)著色ADT BinaryTree2.2 主要算法分析CreatTree()的時(shí)間復(fù)雜度為O(n)InorderTraverse()的時(shí)間復(fù)雜度為O(n)Color()的時(shí)間復(fù)雜度為O(n)2.3 主要算法描述 第三章 詳細(xì)設(shè)計(jì)3.1 程序代碼#include<iostream>#include<string>using namespace std; struct node string color;struct node *lchild
6、; struct node *rchild;/二叉樹(shù)的結(jié)點(diǎn)類(lèi)型 int count = 0; /用于記錄綠色結(jié)點(diǎn)個(gè)數(shù) static int i = 0; /輸入字符的下標(biāo) const string nodecolor3="red","blue","green" /用字符串?dāng)?shù)組存儲(chǔ)節(jié)點(diǎn)的三種顏色 /*根據(jù)輸入的二叉樹(shù)序列構(gòu)建二叉樹(shù),規(guī)定:當(dāng)一個(gè)結(jié)點(diǎn)只有一個(gè)孩子時(shí),令其為左孩子當(dāng)n = 0時(shí)表示葉結(jié)點(diǎn);當(dāng)n = 1時(shí)表示左孩子當(dāng)n = 2時(shí)表示兩個(gè)孩子 */ struct node *CreatTree(string str) struc
7、t node *p; if(i >= str.length() return NULL; int n = int(stri+-48); p=new struct node(); p->color = char(i+48); if(n = 0) p->lchild = NULL; p->rchild = NULL; return p; else if(n = 1) p->lchild = CreatTree(str); p->rchild = NULL; if(n = 2) p->lchild = CreatTree(str); p->rchild
8、 = CreatTree(str); return p;/中序遍歷二叉樹(shù),統(tǒng)計(jì)綠色結(jié)點(diǎn)的個(gè)數(shù) void InorderTraverse(struct node* root) if(root) InorderTraverse(root->lchild); if(root->color = "green") count+; InorderTraverse(root->rchild); /*為二叉樹(shù)染色,以subroot為根結(jié)點(diǎn),color表示當(dāng)前顏色,modle表示當(dāng)前結(jié)點(diǎn)左右染色的兩種情況(例如,當(dāng)前結(jié)點(diǎn)為綠色,其左右孩子的染色情況為 左紅右藍(lán) 或 左藍(lán)右紅
9、 兩種情況),遞歸左子樹(shù),右子樹(shù) */void Color(struct node *subroot, string color, int modle) string str2; int temp = 0; if(subroot = NULL)return; subroot->color = color; for(int i = 0; i < 3; i+) if(nodecolori != color) strtemp+ = nodecolori; if(modle=0) Color(subroot->lchild, str0, modle); Color(subroot-&
10、gt;rchild, str1, modle); else Color(subroot->rchild, str0, modle); Color(subroot->lchild, str1, modle); int main()string order; cin >> order; int max = -1, min = 1000000; struct node *p = CreatTree(order); for(int j = 0; j < 2; j+) /兩種情況 for(int i = 0; i < 3; i+) /三種顏色 Color(p, nodecolori, j); InorderTraverse(p); if(max < count) max = count; if(min > count) min = count; count = 0; cout << max << " " << min << endl; return
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 皮革壓花機(jī)工藝改進(jìn)考核試卷
- JAVA圖形界面框架與開(kāi)發(fā)經(jīng)驗(yàn)分享試題及答案
- 故事代替道理:《說(shuō)到就要做到》
- 2024年小型高效沼氣裝置資金需求報(bào)告代可行性研究報(bào)告
- 跨界合作私人飛機(jī)應(yīng)急滑梯租賃及廣告植入合同
- 2025年中國(guó)辦公室用木家具行業(yè)市場(chǎng)前景預(yù)測(cè)及投資價(jià)值評(píng)估分析報(bào)告
- 2025年中國(guó)白酒收儲(chǔ)行業(yè)市場(chǎng)規(guī)模調(diào)研及投資前景研究分析報(bào)告
- 旅游醫(yī)療保險(xiǎn)經(jīng)紀(jì)代理服務(wù)協(xié)議
- 金融存管安全風(fēng)險(xiǎn)管理合作協(xié)議
- 智能健身倉(cāng)健身數(shù)據(jù)安全保護(hù)與隱私政策合同
- 派出所民警培訓(xùn)課件
- 期中詞性轉(zhuǎn)換專(zhuān)練 2023-2024學(xué)年牛津上海版(試用本)八年級(jí)英語(yǔ)下冊(cè)
- 室外埋地聚乙烯(PE)給水管道工程技術(shù)規(guī)程
- 醫(yī)院培訓(xùn)課件:《ERAS在胃腸外科的應(yīng)用》
- (新版)滑雪指導(dǎo)員技能理論考試復(fù)習(xí)題庫(kù)(含答案)
- 腦動(dòng)脈供血不足的護(hù)理查房
- 民法典介紹:解讀中國(guó)民事法律體系的核心
- 解決多模穴流動(dòng)不平衡問(wèn)題之流道翻轉(zhuǎn)技術(shù)
- 數(shù)據(jù)挖掘(第2版)全套教學(xué)課件
- 勞務(wù)派遣勞務(wù)外包服務(wù)方案(技術(shù)方案)
- 易普拉格科研管理系統(tǒng)
評(píng)論
0/150
提交評(píng)論