20192319 2020-2021-1 《資料結構與面向物件程式設計》實驗八報告
阿新 • • 發佈:2020-12-08
實驗七報告
- 課程:《程式設計與資料結構》
- 班級: 1923
- 姓名: 李歆韻
- 學號:20192319
- 實驗教師:王志強
- 實驗日期:2020年12月6日
- 必修/選修: 必修
1.實驗內容
- 參考教材PP16.1,完成鏈樹LinkedBinaryTree的實現(getRight,contains,toString,preorder,postorder)
用JUnit或自己編寫驅動類對自己實現的LinkedBinaryTree進行測試,提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
課下把程式碼推送到程式碼託管平臺 - 基於LinkedBinaryTree,實現基於(中序,先序)序列構造唯一一棵二㕚樹的功能,比如給出中序HDIBEMJNAFCKGL和先序ABDHIEJMNCFGKL,構造出附圖中的樹
用JUnit或自己編寫驅動類對自己實現的功能進行測試,提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
課下把程式碼推送到程式碼託管平臺 - 自己設計並實現一顆決策樹
提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
課下把程式碼推送到程式碼託管平臺 - 輸入中綴表示式,使用樹將中綴表示式轉換為字尾表示式,並輸出字尾表示式和計算結果(如果沒有用樹,正常評分。如果用到了樹,即使有小的問題,也酌情給滿分)
提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
2.實驗過程與結果
- 參考教材PP16.1,完成鏈樹LinkedBinaryTree的實現(getRight,contains,toString,preorder,postorder)
用JUnit或自己編寫驅動類對自己實現的LinkedBinaryTree進行測試,提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
課下把程式碼推送到程式碼託管平臺
程式碼:
public class LinkedBinaryTreeTest { public static void main(String args[]) { //構建結點 BinaryTreeNode node1 = new BinaryTreeNode(12); BinaryTreeNode node2 = new BinaryTreeNode(34); BinaryTreeNode node3 = new BinaryTreeNode(55); BinaryTreeNode node4 = new BinaryTreeNode(81); BinaryTreeNode node5 = new BinaryTreeNode(99); System.out.println("Node1: "+node1.getElement()); System.out.println("Node2: "+node2.getElement()); System.out.println("Node3: "+node3.getElement()); System.out.println("Node4: "+node4.getElement()); System.out.println("Node5: "+node5.getElement()); //構建二叉樹 LinkedBinaryTree tree1 = new LinkedBinaryTree(node1.getElement()); LinkedBinaryTree tree2 = new LinkedBinaryTree(node2.getElement()); LinkedBinaryTree tree3 = new LinkedBinaryTree(node3.getElement(),tree1,tree2); LinkedBinaryTree tree5 = new LinkedBinaryTree(node5.getElement()); LinkedBinaryTree tree4 = new LinkedBinaryTree(node4.getElement(), tree5, tree3); // node4.setLeft(node5); // node4.setRight(node3); // node3.setRight(node2); // node3.setLeft(node1); System.out.println("Tree: "+tree4.toString()); // System.out.println("Is node1 a leaf? " + node1.isLeaf(node1)); // System.out.println("Is node2 a leaf? " + node2.isLeaf(node2)); // System.out.println("Is node3 a leaf? " + node3.isLeaf(node3)); // System.out.println("Is node4 a leaf? " + node4.isLeaf(node4)); // System.out.println("Is node5 a leaf? " + node5.isLeaf(node5)); System.out.println("Is tree empty? " + tree4.isEmpty()); System.out.println("Height of tree: "+tree4.getHeight()); System.out.println("Does tree contain '19'? " + tree4.contains("19")); System.out.println("Get right child: "+tree4.getRight().toString()); System.out.print("preorder: "); tree4.toPreString(); System.out.println(); System.out.print("postorder: "); tree4.toPostString(); } }
- 基於LinkedBinaryTree,實現基於(中序,先序)序列構造唯一一棵二㕚樹的功能,比如給出中序HDIBEMJNAFCKGL和先序ABDHIEJMNCFGKL,構造出附圖中的樹
用JUnit或自己編寫驅動類對自己實現的功能進行測試,提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
課下把程式碼推送到程式碼託管平臺
程式碼:
public class LinkedBinaryTreeTest2
{
public static void main(String[] args) {
String[] inorder = new String[]{"H","D","I","B","E","M","J","N","A","F","C","K","G","L"};//中序
String[] preorder = new String[]{"A","B","D","H","I","E","J","M","N","C","F","G","K","L"};//先序
LinkedBinaryTree2 tree = new LinkedBinaryTree2();
tree.RebuildTree(inorder,preorder);
System.out.println(tree.toString());
}
}
-
自己設計並實現一顆決策樹
提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
課下把程式碼推送到程式碼託管平臺
-
輸入中綴表示式,使用樹將中綴表示式轉換為字尾表示式,並輸出字尾表示式和計算結果(如果沒有用樹,正常評分。如果用到了樹,即使有小的問題,也酌情給滿分)
提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
3.其它
這一次實驗主要考察我們對樹的結構以及其特點的掌握,涉及到了樹的構建、通過前序與中序構造樹還有決策樹的構建。雖然在最後一箇中綴轉字尾中我沒能用樹的結構來實現,但是通過棧和佇列兩種線性結構來實現這個功能難度依然不小,花費時間較多。