1. 程式人生 > 實用技巧 >20192319 2020-2021-1 《資料結構與面向物件程式設計》實驗八報告

20192319 2020-2021-1 《資料結構與面向物件程式設計》實驗八報告

實驗七報告

  • 課程:《程式設計與資料結構》
  • 班級: 1923
  • 姓名: 李歆韻
  • 學號:20192319
  • 實驗教師:王志強
  • 實驗日期:2020年12月6日
  • 必修/選修: 必修

1.實驗內容

  1. 參考教材PP16.1,完成鏈樹LinkedBinaryTree的實現(getRight,contains,toString,preorder,postorder)
    用JUnit或自己編寫驅動類對自己實現的LinkedBinaryTree進行測試,提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
    課下把程式碼推送到程式碼託管平臺
  2. 基於LinkedBinaryTree,實現基於(中序,先序)序列構造唯一一棵二㕚樹的功能,比如給出中序HDIBEMJNAFCKGL和先序ABDHIEJMNCFGKL,構造出附圖中的樹
    用JUnit或自己編寫驅動類對自己實現的功能進行測試,提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
    課下把程式碼推送到程式碼託管平臺
  3. 自己設計並實現一顆決策樹
    提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
    課下把程式碼推送到程式碼託管平臺
  4. 輸入中綴表示式,使用樹將中綴表示式轉換為字尾表示式,並輸出字尾表示式和計算結果(如果沒有用樹,正常評分。如果用到了樹,即使有小的問題,也酌情給滿分)
    提交測試程式碼執行截圖,要全屏,包含自己的學號資訊

2.實驗過程與結果

  1. 參考教材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();

    }
}


  1. 基於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());
    }
}

  1. 自己設計並實現一顆決策樹
    提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
    課下把程式碼推送到程式碼託管平臺

  2. 輸入中綴表示式,使用樹將中綴表示式轉換為字尾表示式,並輸出字尾表示式和計算結果(如果沒有用樹,正常評分。如果用到了樹,即使有小的問題,也酌情給滿分)
    提交測試程式碼執行截圖,要全屏,包含自己的學號資訊

3.其它

這一次實驗主要考察我們對樹的結構以及其特點的掌握,涉及到了樹的構建、通過前序與中序構造樹還有決策樹的構建。雖然在最後一箇中綴轉字尾中我沒能用樹的結構來實現,但是通過棧和佇列兩種線性結構來實現這個功能難度依然不小,花費時間較多。

參考資料