创建的树的样子:
各种遍历代码:
package Tree;
import java.util.*;
class TreeNode {
public int val;
public TreeNode leftChild;
public TreeNode rightChild;
public TreeNode(int val) {
this.val = val;
}
}
public class Ergodic {
private static TreeNode createBinaryTree(List<Integer> list) {
TreeNode treeNode = null;
if (list == null || list.isEmpty()) {
return null;
}
Integer val = list.remove(0);
if (val != null) {
treeNode = new TreeNode(val);
treeNode.leftChild = createBinaryTree(list);
treeNode.rightChild = createBinaryTree(list);
}
return treeNode;
}
private static void preOrderGui(TreeNode root) {
if (root == null) {
return;
}
System.out.print(root.val + " ");
preOrderGui(root.leftChild);
preOrderGui(root.rightChild);
}
private static void midOrderGui(TreeNode root) {
if (root == null) {
return;
}
midOrderGui(root.leftChild);
System.out.print(root.val + " ");
midOrderGui(root.rightChild);
}
private static void aftOrderGui(TreeNode root) {
if (root == null) {
return;
}
aftOrderGui(root.leftChild);
aftOrderGui(root.rightChild);
System.out.print(root.val + " ");
}
private static void preOrderFeiGui(TreeNode root) {
TreeNode treeNode = root;
Stack<TreeNode> stack = new Stack<>();
while (treeNode != null || !stack.isEmpty()) {
while (treeNode != null) {
System.out.print(treeNode.val + " ");
stack.push(treeNode);
treeNode = treeNode.leftChild;
}
if (!stack.empty()) {
treeNode = stack.pop();
treeNode = treeNode.rightChild;
}
}
}
private static void midOrderFeiGui(TreeNode root) {
TreeNode treeNode = root;
Stack<TreeNode> stack = new Stack<>();
while (treeNode != null || !stack.isEmpty()) {
while (treeNode != null) {
stack.push(treeNode);
treeNode = treeNode.leftChild;
}
if (!stack.isEmpty()) {
treeNode = stack.pop();
System.out.print(treeNode.val + " ");
treeNode = treeNode.rightChild;
}
}
}
private static void aftOrderFeiGui(TreeNode root) {
TreeNode treeNode = root;
Stack<TreeNode> stack = new Stack<>();
TreeNode lastNode = null;
while (treeNode != null || !stack.isEmpty()) {
while (treeNode != null) {
stack.add(treeNode);
treeNode = treeNode.leftChild;
}
if (!stack.isEmpty()) {
treeNode = stack.pop();
if (treeNode.rightChild == null || treeNode.rightChild == lastNode) {
System.out.print(treeNode.val + " ");
lastNode = treeNode;
treeNode = null;
} else {
stack.push(treeNode);
treeNode = treeNode.rightChild;
}
}
}
}
private static void levelOrder(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
TreeNode treeNode = queue.poll();
System.out.print(treeNode.val + " ");
if (treeNode.leftChild != null) {
queue.add(treeNode.leftChild);
}
if (treeNode.rightChild != null) {
queue.add(treeNode.rightChild);
}
}
}
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(null);
list.add(null);
list.add(4);
list.add(null);
list.add(null);
list.add(5);
TreeNode root = createBinaryTree(list);
System.out.print("递归前序遍历:");
preOrderGui(root);
System.out.println();
System.out.print("递归中序遍历:");
midOrderGui(root);
System.out.println();
System.out.print("递归后序遍历:");
aftOrderGui(root);
System.out.println();
System.out.print("非递归前序遍历:");
preOrderFeiGui(root);
System.out.println();
System.out.print("非递归中序遍历:");
midOrderFeiGui(root);
System.out.println();
System.out.print("非递归后序遍历:");
aftOrderFeiGui(root);
System.out.println();
System.out.print("层序遍历:");
levelOrder(root);
System.out.println();
}
}
输出: