二叉树的几种常见的遍历java实现。
package day01.binarytree;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Stack;
public class BinaryTree {
private static class TreeNode {
int data;
TreeNode leftchild;
TreeNode rightchild;
TreeNode(int data) {
this.data = data;
}
}
public static TreeNode createTreeNode(LinkedList<Integer> inputlinked) {
if (inputlinked == null|| inputlinked.isEmpty()) return null;
TreeNode node = null;
Integer data = inputlinked.removeFirst();
if (data != null) {
node = new TreeNode(data);
node.leftchild = createTreeNode(inputlinked);
node.rightchild = createTreeNode(inputlinked);
}
return node;
}
public static void preOrderTraveral(TreeNode node) {
if (node == null) return;
System.out.print(node.data+" ");
preOrderTraveral(node.leftchild);
preOrderTraveral(node.rightchild);
}
public static void inOrderTraveral(TreeNode node) {
if (node == null) return;
inOrderTraveral(node.leftchild);
System.out.print(node.data+" ");
inOrderTraveral(node.rightchild);
}
public static void postOrderTraveral(TreeNode node) {
if (node == null) return;
postOrderTraveral(node.leftchild);
postOrderTraveral(node.rightchild);
System.out.print(node.data+" ");
}
public static void preOrderTraveralWithStack(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
TreeNode treeNode = root;
while (treeNode != null || !stack.isEmpty()) {
while (treeNode != null) {
System.out.print(treeNode.data+" ");
stack.push(treeNode);
treeNode = treeNode.leftchild;
}
if (!stack.isEmpty()) {
treeNode=stack.pop();
treeNode = treeNode.rightchild;
}
}
}
public static void main(String[] args) {
LinkedList<Integer> inputList = new LinkedList<>(Arrays.asList(new Integer[]{3,2,9,null,null,10,null,null,8,null,4}));
TreeNode treeNode = createTreeNode(inputList);
System.out.print("先序遍历:");
preOrderTraveral(treeNode);
System.out.println();
System.out.print("中序遍历:");
inOrderTraveral(treeNode);
System.out.println();
System.out.print("后序遍历:");
postOrderTraveral(treeNode);
System.out.println(" ");
System.out.print("非递归前序遍历");
preOrderTraveralWithStack(treeNode);
}
}
代码测试结果:
