前序遍历:根节点→左节点→右节点
中序遍历:左节点→根节点→右节点
后序遍历:左节点→右节点→根节点
代码实现如下:
public class Tree {
/**
* 前序构建二叉树
*/
public static TreeNode createBinaryTree(LinkedList<Integer> inputList) {
TreeNode node = null;
if (inputList == null || inputList.isEmpty()) {
return null;
}
Integer data = inputList.removeFirst();
if (data != null) {
node = new TreeNode(data);
node.leftChild = createBinaryTree(inputList);
node.rigthChild = createBinaryTree(inputList);
}
return node;
}
/**
* 二叉树节点
*/
private static class TreeNode {
int data;
TreeNode leftChild;
TreeNode rigthChild;
TreeNode(int data) {
this.data = data;
}
}
/**
* 树的前序遍历
*/
public static void preOrderTraveral(TreeNode node) {
if (node == null) {
return;
}
System.out.print(node.data+" ");
preOrderTraveral(node.leftChild);
preOrderTraveral(node.rigthChild);
}
/**
* 树的中序遍历
*/
public static void inOrderTraveral(TreeNode node) {
if (node == null) {
return;
}
inOrderTraveral(node.leftChild);
System.out.print(node.data+" ");
inOrderTraveral(node.rigthChild);
}
/**
* 树的中序遍历
*/
public static void postOrderTraveral(TreeNode node) {
if (node == null) {
return;
}
postOrderTraveral(node.leftChild);
postOrderTraveral(node.rigthChild);
System.out.print(node.data+" ");
}
public static void main(String[] args) {
LinkedList<Integer> inputList = new LinkedList<Integer>(
Arrays.asList(new Integer[] { 3, 2, 9, null, null, 10, null, null, 8, null, 4 }));
TreeNode treeNode = createBinaryTree(inputList);
System.out.println("前序遍历");
preOrderTraveral(treeNode);
System.out.println();
System.out.println("中序遍历");
inOrderTraveral(treeNode);
System.out.println();
System.out.println("后序遍历");
postOrderTraveral(treeNode);
; }
}