Java实现二叉树的封装并测试
时间: 2023-05-12 19:04:21 浏览: 105
可以使用Java中的类来封装二叉树,例如:
```
public class BinaryTree {
private Node root;
private class Node {
private int data;
private Node left;
private Node right;
public Node(int data) {
this.data = data;
}
}
public void insert(int data) {
root = insert(root, data);
}
private Node insert(Node node, int data) {
if (node == null) {
node = new Node(data);
} else {
if (data <= node.data) {
node.left = insert(node.left, data);
} else {
node.right = insert(node.right, data);
}
}
return node;
}
public void inorderTraversal() {
inorderTraversal(root);
}
private void inorderTraversal(Node node) {
if (node != null) {
inorderTraversal(node.left);
System.out.print(node.data + " ");
inorderTraversal(node.right);
}
}
public static void main(String[] args) {
BinaryTree tree = new BinaryTree();
tree.insert(5);
tree.insert(3);
tree.insert(7);
tree.insert(1);
tree.insert(9);
tree.inorderTraversal();
}
}
```
这个类中包含了一个私有内部类Node,用于表示二叉树的节点,以及插入和中序遍历二叉树的方法。在main方法中,我们创建了一个二叉树对象,并插入了一些数据,最后进行中序遍历。
关于测试,我们可以编写一个测试类,例如:
```
public class BinaryTreeTest {
@Test
public void testInsert() {
BinaryTree tree = new BinaryTree();
tree.insert(5);
tree.insert(3);
tree.insert(7);
tree.insert(1);
tree.insert(9);
assertEquals("1 3 5 7 9 ", getInorderTraversal(tree));
}
private String getInorderTraversal(BinaryTree tree) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
tree.inorderTraversal();
return out.toString();
}
}
```
这个测试类使用JUnit框架进行测试,我们编写了一个testInsert方法,用于测试插入数据后的中序遍历是否正确。在这个方法中,我们创建了一个二叉树对象,并插入了一些数据,然后使用assertEquals方法来比较中序遍历的结果是否与预期相同。为了获取中序遍历的结果,我们重定向了System.out输出流,并将结果保存到一个ByteArrayOutputStream对象中。
阅读全文