代码实现
节点实现类
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 = - 2321782309212147194 L; 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 = - 8046156919125106629 L; 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 ( ) ) ; }
}