二叉树遍历
二叉树结点
import lombok.Data;
@Data
public class TreeNode {
private String value;
private TreeNode left;
private TreeNode right;
public TreeNode(String value) {
this.value = value;
}
}
手动生成图中二叉树
TreeNode treeNode1 = new TreeNode("F");
TreeNode treeNode2 = new TreeNode("B");
TreeNode treeNode3 = new TreeNode("G");
TreeNode treeNode4 = new TreeNode("A");
TreeNode treeNode5 = new TreeNode("D");
TreeNode treeNode6 = new TreeNode("I");
TreeNode treeNode7 = new TreeNode("C");
TreeNode treeNode8 = new TreeNode("E");
TreeNode treeNode9 = new TreeNode("H");
treeNode1.setLeft(treeNode2);
treeNode1.setRight(treeNode3);
treeNode2.setLeft(treeNode4);
treeNode2.setRight(treeNode5);
treeNode5.setLeft(treeNode7);
treeNode5.setRight(treeNode8);
treeNode3.setRight(treeNode6);
treeNode6.setLeft(treeNode9);
先序遍历
- 根节点 -> 左结点 -> 右结点
- 输出结果 -> F B A D C E G I H
public static void preOrder(TreeNode treeNode) {
if (treeNode == null) {
return;
}
System.out.print(treeNode.getValue() + " ");
preOrder(treeNode.getLeft());
preOrder(treeNode.getRight());
}
中序遍历
- 左结点 -> 根节点 -> 右结点
- 输出结果 -> A B C D E F G H I
public static void midOrder(TreeNode treeNode) {
if (treeNode == null) {
return;
}
midOrder(treeNode.getLeft());
System.out.print(treeNode.getValue() + " ");
midOrder(treeNode.getRight());
}
后序遍历
- 右结点 -> 左结点 -> 根节点
- 输出结果 -> A B C D E G H I F
public static void midOrder(TreeNode treeNode) {
if (treeNode == null) {
return;
}
midOrder(treeNode.getLeft());
System.out.print(treeNode.getValue() + " ");
midOrder(treeNode.getRight());
}
层序遍历
- 输出结果 -> F B G A D I C E H
public static void levelOrder(TreeNode treeNode) {
Queue<TreeNode> queue = new LinkedList<>();
queue.add(treeNode);
while (!queue.isEmpty()) {
TreeNode temp = queue.poll();
System.out.print(temp.getValue() + " ");
if (temp.getLeft() != null) {
queue.add(temp.getLeft());
}
if (temp.getRight() != null) {
queue.add(temp.getRight());
}
}
}