20192319 2020-2021-1 《数据结构与面向对象程序设计》实验八报告
实验七报告
- 课程:《程序设计与数据结构》
- 班级: 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.其它
这一次实验主要考察我们对树的结构以及其特点的掌握,涉及到了树的构建、通过前序与中序构造树还有决策树的构建。虽然在最后一个中缀转后缀中我没能用树的结构来实现,但是通过栈和队列两种线性结构来实现这个功能难度依然不小,花费时间较多。