20202325 實驗八 《結構基礎與面向物件程式設計》實驗報告
# 20202306 2021-2022-1 《資料結構與面向物件程式設計》實驗八報告
課程:《程式設計與資料結構》
班級: 2023
姓名: 和宇
學號:20202325
實驗教師:王志強
實驗日期:2021年11月25日
必修/選修: 必修
## 1.實驗內容
1.參考教材PP16.1,完成鏈樹LinkedBinaryTree的實現(getRight,contains,toString,preorder,postorder)
用JUnit或自己編寫驅動類對自己實現的LinkedBinaryTree進行測試,提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
課下把程式碼推送到程式碼託管平臺
2.基於LinkedBinaryTree,實現基於(中序,先序)序列構造唯一一棵二㕚樹的功能,比如給出中序HDIBEMJNAFCKGL和後序ABDHIEJMNCFGKL,構造出附圖中的樹
用JUnit或自己編寫驅動類對自己實現的功能進行測試,提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
課下把程式碼推送到程式碼託管平臺
3.自己設計並實現一顆決策樹
提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
課下把程式碼推送到程式碼託管平臺
4.輸入中綴表示式,使用樹將中綴表示式轉換為字尾表示式,並輸出字尾表示式和計算結果(如果沒有用樹,正常評分。如果用到了樹,即使有小的問題,也酌情給滿分)
提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
#過程
1.參考教材PP16.1,完成鏈樹LinkedBinaryTree的實現(getRight,contains,toString,preorder,postorder)
用JUnit或自己編寫驅動類對自己實現的LinkedBinaryTree進行測試,提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
課下把程式碼推送到程式碼託管平臺
程式碼:
Node:
package BinaryTree; public class Node { int data; //節點資料 Node leftChild; //左子節點的引用 Node rightChild; //右子節點的引用 boolean isDelete;//表示節點是否被刪除 public Node(int data){ this.data = data; }//列印節點內容 // public void display(){ // System.out.println(data); // } @Override public String toString() { return "data=" + data +","+ "leftChild=" + leftChild + ","+" rightChild=" + rightChild + ","+"isDelete=" + isDelete; } }
BinareTree:
package BinaryTree; public class BinaryTree1 implements Tree { private Node root; //插入節點 public boolean insert(int data) { Node newNode = new Node(data); if(root == null){//當前樹為空樹,沒有任何節點 root = newNode; return true; }else{ Node current = root; Node parentNode = null; while(current != null){ parentNode = current; if(current.data > data){//當前值比插入值大,搜尋左子節點 current = current.leftChild; if(current == null){//左子節點為空,直接將新值插入到該節點 parentNode.leftChild = newNode; return true; } }else{ current = current.rightChild; if(current == null){//右子節點為空,直接將新值插入到該節點 parentNode.rightChild = newNode; return true; } } } } return false; } //查詢節點 public Node find(int key) { Node current = root; while(current != null){ if(current.data > key){//當前值比查詢值大,搜尋左子樹 current = current.leftChild; }else if(current.data < key){//當前值比查詢值小,搜尋右子樹 current = current.rightChild; }else{ return current; } } return null;//遍歷完整個樹沒找到,返回null } //中序遍歷 public void infixOrder(Node current){ if(current != null){ infixOrder(current.leftChild); System.out.print(current.data+" "); infixOrder(current.rightChild); } } //前序遍歷 public void preOrder(Node current){ if(current != null){ System.out.print(current.data+" "); preOrder(current.leftChild); preOrder(current.rightChild); } } //後序遍歷 public void postOrder(Node current){ if(current != null){ postOrder(current.leftChild); postOrder(current.rightChild); System.out.print(current.data+" "); } } //找到最大值 public Node findMax(){ Node current = root; Node maxNode = current; while(current != null){ maxNode = current; current = current.rightChild; } return maxNode; } //找到最小值 public Node findMin(){ Node current = root; Node minNode = current; while(current != null){ minNode = current; current = current.leftChild; } return minNode; } public static void main(String[] args) { BinaryTree1 tree = new BinaryTree1(); tree.insert(21); tree.insert(50); tree.insert(20); tree.insert(11); tree.insert(27); tree.insert(23); tree.insert(25); tree.insert(100); System.out.println(tree.findMax().data); System.out.println(tree.findMin().data); System.out.println(tree.find(100)); System.out.println(tree.find(10)); System.out.println("中序:"); tree.infixOrder(tree.root);//中序 System.out.println(); System.out.println("後序:"); tree.postOrder(tree.root);//後序 System.out.println(); System.out.println("先序:"); tree.preOrder(tree.root);//前序 } }
執行結果:
2.基於LinkedBinaryTree,實現基於(中序,先序)序列構造唯一一棵二㕚樹的功能,比如給出中序HDIBEMJNAFCKGL和後序ABDHIEJMNCFGKL,構造出附圖中的樹
用JUnit或自己編寫驅動類對自己實現的功能進行測試,提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
課下把程式碼推送到程式碼託管平臺
結果:
3.自己設計並實現一顆決策樹
提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
課下把程式碼推送到程式碼託管平臺
4.輸入中綴表示式,使用樹將中綴表示式轉換為字尾表示式,並輸出字尾表示式和計算結果(如果沒有用樹,正常評分。如果用到了樹,即使有小的問題,也酌情給滿分)
提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
#問題
1.程式設計沒有思路,不知道該怎麼入手。
解:翻教材,問同學,上網查資料;
2.程式與程式之間互相聯絡,互相繼承和引用,改了一個程式,結果前面的許多貌似不相關的程式直接報錯,回過頭來找卻發現已經找不到是哪裡出問題了,東拼西湊處處報錯。
#感悟
感悟還是老生常談,編寫程式時迷迷糊糊的,感覺腦子已經不夠用了……得潛心學習一段時間了。
## 參考資料
- [《Java和Andriod開發學習指南(第二版)人民郵電出版社》]
- [《Java軟體結構與資料結構(第三版)清華大學出版社》]