20172304 實驗二報告
20172304 實驗二報告
- 課程:《軟體結構與資料結構》
- 班級: 1723
- 姓名: 李馨雨
- 學號:20172328
- 實驗教師:王志強
- 助教:張師瑜&張之睿
- 實驗日期:2018年11月5日-2018年11月12日
必修選修: 必修
實驗要求
實驗一:實現二叉樹
參考教材p212,完成鏈樹LinkedBinaryTree的實現(getRight,contains,toString,preorder,postorder)
用JUnit或自己編寫驅動類對自己實現的LinkedBinaryTree進行測試,提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
課下把程式碼推送到程式碼託管平臺
實驗二:中序先序序列構造二叉樹
基於LinkedBinaryTree,實現基於(中序,先序)序列構造唯一一棵二㕚樹的功能,比如給出中序HDIBEMJNAFCKGL和後序ABDHIEJMNCFGKL,構造出附圖中的樹,用JUnit或自己編寫驅動類對自己實現的功能進行測試,提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
實驗三:決策樹
自己設計並實現一顆決策樹,提交測試程式碼執行截圖,要全屏,包含自己的學號資訊,課下把程式碼推送到程式碼託管平臺
實驗四:表示式樹
輸入中綴表示式,使用樹將中綴表示式轉換為字尾表示式,並輸出字尾表示式和計算結果(如果沒有用樹,則為0分),提交測試程式碼執行截圖,要全屏,包含自己的學號資訊,課下把程式碼推送到程式碼託管平臺
實驗五:二叉查詢樹
完成PP11.3,提交測試程式碼執行截圖,要全屏,包含自己的學號資訊,課下把程式碼推送到程式碼託管平臺
實驗六 : 紅黑樹分析
參考本部落格:點選進入對Java中的紅黑樹(TreeMap,HashMap)進行原始碼分析,並在實驗報告中體現分析結果。實驗過程及實驗結果
實驗一過程及結果:
LinedBinaryTree碼雲連結
測試類及測試結果
package week6.jsjf; public class LinkedBinaryTreeTest { public static void main(String[] args) throws InterruptedException { LinkedBinaryTree c=new LinkedBinaryTree("b");LinkedBinaryTree b=new LinkedBinaryTree("c");LinkedBinaryTree a=new LinkedBinaryTree("Translation",c,b); LinkedBinaryTree e=new LinkedBinaryTree("F"); LinkedBinaryTree f=new LinkedBinaryTree("g",a,e); System.out.println("二叉樹的toString方法"); System.out.println(f.toString()); System.out.println("二叉樹的先序遍歷"); f.preorder(f.getRootNode()); System.out.println(); System.out.println("二叉樹的後序遍歷"); f.postorder(f.getRootNode()); System.out.println(); System.out.println("二叉樹的中序遍歷"); f.Inorder(f.getRootNode()); System.out.println(); System.out.println("二叉樹的層序遍歷"); f.unrecursionlevelOreder(f.getRootNode()); System.out.println(); System.out.println( "查詢是否包含a的結果:"+f.contains("Translation")+"二叉樹中的元素:"+"b, c, Translation, F, g"); System.out.println("查詢是否包含A的結果:"+f.contains("A")+"二叉樹中的元素:"+"b, c, Translation, F, g"); System.out.println("getRight方法的檢驗,即輸出樹的根節點的右子樹"); System.out.println(f.getRight().toString()); System.out.println("getLeft方法的檢驗,即輸出樹的根節點的左子樹"); System.out.println(f.getLeft().toString()); System.out.println("二叉樹的高度:"+f.getHeight()+"二叉樹的元素個數:"+f.size()+"二叉樹的根元素"+f.getRootElement()); } }
實驗二
這個實驗要求的是通過給定的中綴表示式和字尾表示式構建二叉樹題目中給定了中序HDIBEMJNAFCKGL和先序ABDHIEJMNCFGKL。
我們由先序知道二叉樹的根節點是為A,在中序遍歷中就可以知道以A為根節點的左子樹為“HDIBEMJN”,右子樹為“FCKGL”。由於我是使用陣列記錄的兩個序列。所以在每一次確定完根節點以後,我就會更新陣列的指標,在通過遞迴依次確定左子樹的根節點和右子樹的根節點,在進行過幾次遞迴之後。就可以得到以中序遍歷以及先序遍歷為基礎的二叉樹了。
測試結果
BTCreation碼雲連結
實驗三
決策樹,這個的實現是基於書上的程式碼,這個實際上也沒有也沒有太大的難度
CharacterAnalyzer
這是我設計的決策樹
測試結果
實驗四
這個實驗主要要求是通過二叉樹將中綴表示式轉為字尾表示式,輸出並計算字尾表示式並計算字尾表示式的結果。
實驗分析:書上已經有了將字尾表示式構建二叉樹並計算的方法了,實際上餓哦們只需要將中綴表示式按照優先順序的順序錄入二叉樹中,就可以呼叫樹中的方法計算並得到結果了。然後我就做了實際上原理與那個直接中綴轉字尾相仿。
碼雲連結
Translation
測試結果截圖
測試程式碼
public static void main(String[] args) {
Translation translation =new Translation();
String a="8 / 4 - 9 + 11 * 2";
translation.Translate(a);
System.out.println("中綴表示式樹是");
System.out.println(translation.getTree());
System.out.println("後序遍歷是"+translation.PostOrder());
System.out.println("結果是"+translation.getResult());
}
實驗五
這個實驗主要就是測試一下沒有什麼好講的
碼雲連結
LinkedBinarySearchTree
測試程式碼
package week7.jsjf;
public class LinkedBinarySearchTreeTest {
public static void main(String[] args) throws InterruptedException {
LinkedBinarySearchTree a=new LinkedBinarySearchTree();
a.addElement(80);
a.addElement(10);
a.addElement(9);
a.addElement(6);
a.addElement(7);
a.addElement(85);
a.addElement(16);
a.addElement(44);
System.out.println(a.toString());
System.out.println(a.findMax());
System.out.println(a.findMin());
System.out.println(a.find(85));
a.removeElement(10);
System.out.println(a.toString());
a.removeMax();
System.out.println(a.toString());
a.removeMin();
System.out.println(a.toString());
}
}
測試結果
實驗六