20202328 实验报告八《树》
1.实验内容
- 参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)
- 用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
- 课下把代码推送到代码托管平台
- 基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序HDIBEMJNAFCKGL和后序ABDHIEJMNCFGKL,构造出附图中的树
- 用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
- 课下把代码推送到代码托管平台
- 自己设计并实现一颗决策树
- 提交测试代码运行截图,要全屏,包含自己的学号信息
- 课下把代码推送到代码托管平台
- 输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果(如果没有用树,正常评分。如果用到了树,即使有小的问题,也酌情给满分)
- 提交测试代码运行截图,要全屏,包含自己的学号信息
2.实验过程及结果
完成链树LinkedBinaryTree的实现
LinkedBinaryTree
BTNode

基于(中序,先序)序列构造唯一一棵二㕚树的功能
- 扩展LinkedBinaryTree
-
public BTNode construct(char[] pre, char[] in) { if (pre.length == 0 || in.length == 0) { return null; } BTNode<Character> tree = new BTNode<Character>(pre[0]); int index = search(0, in.length, in, tree.getElement()); tree.setLeft(construct(Arrays.copyOfRange(pre, 1, index + 1), Arrays.copyOfRange(in, 0, index))); tree.setRight(construct(Arrays.copyOfRange(pre, index + 1, pre.length), Arrays.copyOfRange(in, index + 1, in.length))); return tree; } public int search(int start, int end, char[] inOrders, char data) { for (int i = start; i < end; i++) { if (data == inOrders[i]) { return i; } } return -1; } public void preOrder(BTNode<T> Tree) { System.out.print(Tree.getElement() + " "); BTNode<T> leftTree = Tree.left; if (leftTree != null) { preOrder(leftTree); } BTNode<T> rightTree = Tree.right; if (rightTree != null) { preOrder(rightTree); } } public static void inOrder(BTNode tree) { if (tree == null) return; else { inOrder(tree.left); System.out.print(tree.print() + " "); inOrder(tree.right); } }
- 结果