废话不多数,直接上代码。
import java.util.Arrays;
import java.util.LinkedList;
/**
* @author lizz
* @ClassName TreeNode.java
* @Description 二叉树节点
* @createTime 2022年04月15日 16:06:00
*
* 二叉树遍历:
* 1、深度优先遍历:前序遍历、中序遍历、后序遍历
* 2、广度优先遍历:层序遍历
*/
public class TreeNode {
Object data;
TreeNode leftChild;
TreeNode rightChild;
TreeNode(Object data){
this.data = data;
}
/**
* 构建二叉树
* @param inputList 输入序列
* @return
*/
public TreeNode createBinaryTree(LinkedList<Object> inputList){
TreeNode treeNode = null;
if(inputList == null || inputList.isEmpty()){
return null;
}
//取出集合中第一个元素
Object data = inputList.removeFirst();
if(data != null){
treeNode = new TreeNode(data);
//递归生产二叉树
treeNode.leftChild = createBinaryTree(inputList);
treeNode.rightChild = createBinaryTree(inputList);
}
return treeNode;
}
/**
* 二叉树 前序遍历
* 输出顺序:根节点 -> 左子树 -> 右子树
* @param treeNode 二叉树节点
*/
public void preOrderTraveral(TreeNode treeNode){
if(treeNode == null){
return;
}
// 输出根节点
System.out.println(treeNode.data);
// 输出左子树
preOrderTraveral(treeNode.leftChild);
// 输出右子树
preOrderTraveral(treeNode.rightChild);
}
/**
* 二叉树 中序遍历
* 输出顺序:左子树 -> 根节点 -> 右子树
* @param treeNode
*/
public void inOrderTraveral(TreeNode treeNode){
if(treeNode == null){
return;
}
// 输出左子树
inOrderTraveral(treeNode.leftChild);
// 输出根节点
System.out.println(treeNode.data);
// 输出右子树
inOrderTraveral(treeNode.rightChild);
}
/**
* 二叉树 后序遍历
* 输出顺序:左子树 -> 右子树 -> 根节点
* @param treeNode
*/
public void postOrderTraveral(TreeNode treeNode){
if(treeNode == null){
return;
}
// 输出左子树
postOrderTraveral(treeNode.leftChild);
// 输出右子树
postOrderTraveral(treeNode.rightChild);
// 输出根节点
System.out.println(treeNode.data);
}
public static void main(String[] args) {
LinkedList<Object> inputList = new LinkedList<>(Arrays.asList(new Object[]{"test10","test21","test3",null,null,"test8",null,"test6",null,null,"test1","test2","test4"}));
TreeNode treeNode = new TreeNode(null);
TreeNode binaryTree = treeNode.createBinaryTree(inputList);
System.out.println("前序遍历:");
binaryTree.preOrderTraveral(binaryTree);
System.out.println("中序遍历:");
binaryTree.inOrderTraveral(binaryTree);
System.out.println("后序遍历:");
binaryTree.postOrderTraveral(binaryTree);
}
}
以上代码生成的二叉树如下图: