




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告 學(xué)院: 管理學(xué)院 班級(jí): 13電商1班 姓名: 蔡少云 學(xué)號(hào): 321300- 2014年 12 月1 日目錄一、需求分析 問題描述 基本要求 實(shí)現(xiàn)說明二、設(shè)計(jì)目的三、概要設(shè)計(jì)基本框架圖設(shè)計(jì)想法四、詳細(xì)設(shè)計(jì) 結(jié)點(diǎn)類 二叉樹接口 二叉樹類 測(cè)試類五、測(cè)試結(jié)果 基本數(shù)據(jù) 操作截圖六、用戶使用說明七、心得體會(huì)題目:二叉樹的基本操作一、需求分析【問題描述】在一棵二叉鏈表表示的二叉樹中,實(shí)現(xiàn)以下操作,并說明采用哪種遍歷算法,其他遍歷算法是否可行。1. 二叉樹的先根次序遍歷2. 輸出以p結(jié)點(diǎn)為根的子樹的所有葉子結(jié)點(diǎn),先根次序遍歷算法3. 將每個(gè)結(jié)點(diǎn)的左子樹與右子樹交換4. 由中根和后根次
2、序遍歷序列構(gòu)造二叉樹5. 二叉樹深拷貝,復(fù)制一棵二叉樹【基本要求】建立結(jié)點(diǎn)類,二叉樹接口。實(shí)現(xiàn)二叉樹的先根次序遍歷,中根次序遍歷和后根次序遍歷?!緦?shí)現(xiàn)說明】可以利用利用二叉樹的先根次序遍歷完成相應(yīng)功能。二、設(shè)計(jì)目的1、達(dá)到熟悉掌握java和數(shù)據(jù)結(jié)構(gòu)的基本知識(shí)和技能;2、能夠利用所學(xué)的基本知識(shí)和技能,解決簡(jiǎn)單的面向?qū)ο蟮脑O(shè)計(jì)問題;3、把課本上的知識(shí)應(yīng)用到實(shí)際生活中,達(dá)到學(xué)以致用的目的;4、復(fù)習(xí)學(xué)過的知識(shí),思考新的問題;三、概要設(shè)計(jì)(1)基本框架圖:結(jié)點(diǎn)類屬性:data、left、right、構(gòu)造函數(shù)方法:輸出方法、判斷是否葉子結(jié)點(diǎn)方法判斷二叉樹是否為空isEmpty()二叉樹接口先根、中根、后根
3、次序遍歷二叉樹遍歷輸出葉子結(jié)點(diǎn)lrTran();將每個(gè)結(jié)點(diǎn)的左子樹與右子樹交換leaf1()二叉樹深拷貝,復(fù)制一棵二叉樹抽象方法實(shí)現(xiàn)二叉樹類 (2)設(shè)計(jì)想法:1、建立結(jié)點(diǎn)類BinaryNode;2、建立二叉樹接口BinaryTTree<T>3、建立二叉樹類,實(shí)現(xiàn)二叉樹接口BinaryTree<T>4、建立主類,創(chuàng)建二叉樹,進(jìn)行測(cè)試。四、詳細(xì)設(shè)計(jì)1、結(jié)點(diǎn)類/結(jié)點(diǎn)類public class BinaryNode<T> /二叉樹的二叉鏈表結(jié)點(diǎn)類,泛型T指定結(jié)點(diǎn)的元素類型 public T data; /數(shù)據(jù)域,存儲(chǔ)數(shù)據(jù)元素 public BinaryNode<
4、;T> left, right; /鏈域,分別指向左、右孩子結(jié)點(diǎn) /構(gòu)造結(jié)點(diǎn),參數(shù)分別指定元素和左、右孩子結(jié)點(diǎn) public BinaryNode(T data, BinaryNode<T> left, BinaryNode<T> right) this.data = data; this.left = left; this.right = right; public BinaryNode(T data) /構(gòu)造指定值的葉子結(jié)點(diǎn) this(data, null, null); public BinaryNode() this(null, null, null);
5、/可聲明以下方法 public String toString() return this.data.toString(); public boolean equals(Object obj) /比較兩個(gè)結(jié)點(diǎn)值是否相等,覆蓋Object類的equals(obj)方法 return obj=this | obj instanceof BinaryNode && this.data.equals(BinaryNode<T>)obj).data); public boolean isLeaf() /判斷是否葉子結(jié)點(diǎn) return this.left=null &&
6、amp; this.right=null; 2、二叉樹接口:/二叉樹接口public interface BinaryTTree<T> /二叉樹接口,二叉樹抽象數(shù)據(jù)類型boolean isEmpty(); /判斷二叉樹是否空void preOrder(); /先根次序遍歷二叉樹void inOrder(); /中根次序遍歷二叉樹void postOrder(); /后根次序遍歷二叉樹 void lrTran(); void leaf1();BinaryNode<T> copy(BinaryNode<T> p); 3、二叉樹類:/二叉樹類,實(shí)現(xiàn)BinaryTT
7、ree<T>接口,泛型T指定結(jié)點(diǎn)的元素類型public class BinaryTree<T> implements BinaryTTree<T> public BinaryNode<T> root; /根結(jié)點(diǎn),結(jié)點(diǎn)結(jié)構(gòu)為二叉鏈表 public BinaryTree() /構(gòu)造空二叉樹 this.root=null; public boolean isEmpty() /判斷二叉樹是否空 return this.root=null; /* 1.先根次序遍歷* public void preOrder() /先根次序遍歷二叉樹 System.out.
8、print("先根次序遍歷二叉樹: "); preOrder(root); /調(diào)用先根次序遍歷二叉樹的遞歸方法 System.out.println(); public void preOrder(BinaryNode<T> p) /先根次序遍歷以p結(jié)點(diǎn)為根的子二叉樹,遞歸方法 if (p!=null) /若二叉樹不空 System.out.print(p.data.toString()+" "); /訪問當(dāng)前結(jié)點(diǎn) preOrder(p.left); /按先根次序遍歷當(dāng)前結(jié)點(diǎn)的左子樹,遞歸調(diào)用 preOrder(p.right); /按先根次
9、序遍歷當(dāng)前結(jié)點(diǎn)的右子樹,遞歸調(diào)用 public String toString() /返回先根次序遍歷二叉樹所有結(jié)點(diǎn)的描述字符串 return toString(root); private String toString(BinaryNode<T> p) /返回先根次序遍歷以p為根的子樹描述字符串,遞歸算法 if (p=null) return "" return p.data.toString()+" " + toString(p.left) + toString(p.right);/遞歸調(diào)用 /2.輸出以p結(jié)點(diǎn)為根的子樹的所有葉子結(jié)點(diǎn),
10、先根次序遍歷算法 public void leaf1() /遍歷輸出葉子結(jié)點(diǎn) leaf1(root); private void leaf1(BinaryNode<T> p) int sum = 0; if(p!=null) if (p.left=null && p.right=null) /p.isLeaf() System.out.print(p.data.toString()+" "); leaf1(p.left); /遞歸 leaf1(p.right); /*3.將每個(gè)結(jié)點(diǎn)的左子樹與右子樹交換* public void lrTran()
11、lrTran(root); public void lrTran(BinaryNode<T> p) if (!(p.left=null&&p.right=null) BinaryNode<T> temp = p.left; p.left = p.right; p.right = temp; /*4.由中根和后根次序遍歷序列構(gòu)造二叉樹* /* 中根次序遍歷* public void inOrder() /中根次序遍歷二叉樹 System.out.print("中根次序遍歷二叉樹: "); inOrder(root); System.ou
12、t.println(); public void inOrder(BinaryNode<T> p) /中根次序遍歷以p結(jié)點(diǎn)為根的子二叉樹,遞歸方法 if (p!=null) inOrder(p.left); /中根次序遍歷左子樹,遞歸調(diào)用 System.out.print(p.data.toString()+" "); inOrder(p.right); /中根次序遍歷右子樹,遞歸調(diào)用 /* 后根次序遍歷* public void postOrder() /后根次序遍歷二叉樹 System.out.print("后根次序遍歷二叉樹: ");
13、postOrder(root); System.out.println(); public void postOrder(BinaryNode<T> p) /后根次序遍歷以p結(jié)點(diǎn)為根的子二叉樹,遞歸方法 if (p!=null) postOrder(p.left); postOrder(p.right); System.out.print(p.data.toString()+" "); /*5.二叉樹深拷貝,復(fù)制一棵二叉樹* public BinaryNode<T> copy(BinaryNode<T> p) if (p=null) re
14、turn null; BinaryNode<T> q = new BinaryNode<T>(p.data); q.left = copy(p.left); /復(fù)制左子樹,遞歸調(diào)用 q.right = copy(p.right); /復(fù)制右子樹,遞歸調(diào)用 return q; /返回建立子樹的根結(jié)點(diǎn) 4.測(cè)試類:/主類public class BinaryTree_make public static BinaryTree<String> make() /構(gòu)造給定的一棵二叉樹 /* A / B C / / D E F / G H */ BinaryTree&l
15、t;String> bitree=new BinaryTree<String>(); /創(chuàng)建空二叉樹 BinaryNode<String> child_f, child_d, child_b, child_c; child_d = new BinaryNode<String>("D", null, new BinaryNode<String>("G"); child_b = new BinaryNode<String>("B", child_d, null); chil
16、d_f = new BinaryNode<String>("F", new BinaryNode<String>("H"), null); child_c = new BinaryNode<String>("C", new BinaryNode<String>("E"), child_f); bitree.root = new BinaryNode<String>("A", child_b, child_c); return bitre
17、e; public static void main(String args) BinaryTree<String> bitree = make(); bitree.leaf1(); System.out.println("n"+"先根次序遍歷為:"); bitree.preOrder(bitree.root); bitree.lrTran(); System.out.println("n"+"左右子樹交換后的先根次序遍歷為:"); bitree.preOrder(bitree.root); System.out.println("n"+"中根次序遍歷為:"); bitree.inOrder(bitree.root); System.out.println("n"+"后根次序遍歷為:"); bitree.postOrder(bitree.root)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 科室醫(yī)療垃圾管理辦法
- 廣西項(xiàng)目經(jīng)費(fèi)管理辦法
- 肩周炎的康復(fù)護(hù)理
- 肩周炎中醫(yī)講座課件教案
- 肥胖的班會(huì)課件
- 灌籃高手培訓(xùn)課件
- 住院醫(yī)師培訓(xùn)課件
- 股利政策教學(xué)課件
- 肝癌患者的護(hù)理課件
- 東莞一模數(shù)學(xué)試卷
- 采購協(xié)議與合作框架構(gòu)建
- 2023年第四屆全國郵政行業(yè)職業(yè)技能競(jìng)賽-全國總決賽理論知識(shí)試題及答案
- 注塑上下模培訓(xùn)-
- 鋼與混凝土組合結(jié)構(gòu)課件
- 店鋪?zhàn)夥砍兄Z書范本
- 二升三數(shù)學(xué)暑假作業(yè)
- 職業(yè)衛(wèi)生知識(shí)競(jìng)賽題
- 鋼結(jié)構(gòu)接水盤施工方案
- 醫(yī)院關(guān)于支持醫(yī)務(wù)人員從事晚間門診和節(jié)假日門診的措施
- 酒店住宿水單標(biāo)準(zhǔn)模板
- 中華民族大家庭教學(xué)設(shè)計(jì)(完整版)資料
評(píng)論
0/150
提交評(píng)論