代码实现
节点实现类
package csdn.dreamzuora.tree;
public interface Node {
}
package csdn.dreamzuora.tree;
import java.io.Serializable;
public abstract class AbstractNode<T, E> implements Node, Serializable {
private static final long serialVersionUID = -2321782309212147194L;
T data;
E left;
E right;
public AbstractNode() {
}
public AbstractNode(T data) {
this.data = data;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public E getLeft() {
return left;
}
public void setLeft(E left) {
this.left = left;
}
public E getRight() {
return right;
}
public void setRight(E right) {
this.right = right;
}
}
package csdn.dreamzuora.tree;
public class BinaryNode extends AbstractNode<Integer, BinaryNode>{
public BinaryNode(Integer data) {
super(data);
}
}
二叉树实现
package csdn.dreamzuora.tree;
import java.util.List;
public interface Tree<T,E> {
void createTree(List<T> dataList);
E addNode(E tree, T data);
void deleteNode(E tree, E node);
void preOrder(List<T> list, E node);
void inOrder(List<T> list, E node);
void laOrder(List<T> list, E node);
void bfs(List<T> list, E node);
}
package csdn.dreamzuora.tree;
import java.io.Serializable;
import java.util.List;
public abstract class AbstractTree<T, E> implements Tree<T, E>, Serializable {
private static final long serialVersionUID = -8046156919125106629L;
E root;
@Override
public void createTree(List<T> dataList) {
for (T data : dataList){
root = addNode(root, data);
}
}
}
package csdn.dreamzuora.tree;
import java.util.LinkedList;
import java.util.List;
public class BinaryTree extends AbstractTree<Integer, BinaryNode>{
@Override
public BinaryNode addNode(BinaryNode node, Integer data) {
if (node == null){
return new BinaryNode(data);
}
if (node.data > data){
node.left = addNode(node.left, data);
}else if (node.data < data){
node.right = addNode(node.right, data);
}else {
node.data = data;
}
return node;
}
@Override
public void deleteNode(BinaryNode tree, BinaryNode node) {
}
@Override
public void preOrder(List<Integer> list, BinaryNode node) {
if (node == null){
return;
}
list.add(node.data);
preOrder(list, node.left);
preOrder(list, node.right);
}
@Override
public void inOrder(List<Integer> list, BinaryNode node) {
if (node == null){
return;
}
inOrder(list, node.left);
list.add(node.data);
inOrder(list, node.right);
}
@Override
public void laOrder(List<Integer> list, BinaryNode node) {
if (node == null){
return;
}
laOrder(list, node.left);
laOrder(list, node.right);
list.add(node.data);
}
@Override
public void bfs(List<Integer> list, BinaryNode node) {
if (node == null){
return;
}
LinkedList<BinaryNode> queue = new LinkedList<>();
queue.offer(node);
while (!queue.isEmpty()){
BinaryNode child = queue.poll();
list.add(child.data);
if (child.left != null){
queue.offer(child.left);
}
if (child.right != null){
queue.offer(child.right);
}
}
}
}
单元测试
package csdn.dreamzuora.tree;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static org.junit.Assert.*;
public class BinaryTreeTest {
BinaryTree binaryTree = new BinaryTree();
@Before
public void createTree(){
List<Integer> list = Arrays.asList(5, 4, 7, 2, 3, 6, 8);
binaryTree.createTree(list);
}
@Test
public void preOrder() {
List<Integer> showList = new ArrayList<>();
binaryTree.preOrder(showList, binaryTree.root);
List<Integer> predictList = Arrays.asList(5, 4, 2, 3, 7, 6, 8);
Assertions.assertEquals(predictList.toString(), showList.toString());
}
@Test
public void inOrder() {
List<Integer> showList = new ArrayList<>();
binaryTree.inOrder(showList, binaryTree.root);
List<Integer> predictList = Arrays.asList(2, 3, 4, 5, 6, 7, 8);
Assertions.assertEquals(predictList.toString(), showList.toString());
}
@Test
public void laOrder(){
List<Integer> showList = new ArrayList<>();
binaryTree.laOrder(showList, binaryTree.root);
List<Integer> predictList = Arrays.asList(3, 2, 4, 6, 8, 7, 5);
Assertions.assertEquals(predictList.toString(), showList.toString());
}
@Test
public void bfs(){
List<Integer> showList = new ArrayList<>();
binaryTree.bfs(showList, binaryTree.root);
List<Integer> predictList = Arrays.asList(5, 4, 7, 2, 6, 8, 3);
Assertions.assertEquals(predictList.toString(), showList.toString());
}
}