思路分析:
前序遍历:先输出根节点本身,然后再递归输出左节点和右节点
中序遍历:先递归输出左节点,再输出根节点,最后递归输出右节点
后序遍历:先递归输出左右节点,再输出根节点
代码演示:
package com.monster.tree;
/**
* @author Monster
* @version v1.0
* @time 03-22-2021 08:21:09
* @description: 二叉树的前序、中序、后序遍历
*/
public class BinaryTreeDemo {
public static void main(String[] args) {
Node root = new Node(6);
root.left = new Node(3);
root.right = new Node(9);
root.left.left = new Node(0);
root.left.right = new Node(5);
root.right.left = new Node(7);
root.right.right = new Node(13);
BinaryTree binaryTree = new BinaryTree(root);
binaryTree.preOrder();
System.out.println();
binaryTree.infixOrder();
System.out.println();
binaryTree.postOrder();
}
}
// 定义BinaryTree二叉树
class BinaryTree {
private Node root;
public BinaryTree(Node root) {
this.root = root;
}
public void preOrder() {
if(root != null) {
root.preOrder();
}else {
System.out.println("根节点为空!!!");
}
}
public void infixOrder() {
if(root != null) {
root.infixOrder();
}else {
System.out.println("根节点为空!!!");
}
}
public void postOrder() {
if(root != null) {
root.postOrder();
}else {
System.out.println("根节点为空!!!");
}
}
}
class Node {
int data;
Node left;
Node right;
public Node(int data) {
this.data = data;
}
// 前序遍历
public void preOrder() {
System.out.print(this.data + " ");
if(this.left != null) {
this.left.preOrder();
}
if(this.right != null) {
this.right.preOrder();;
}
}
// 中序遍历
public void infixOrder() {
if(this.left != null) {
this.left.infixOrder();
}
System.out.print(this.data + " ");
if(this.right != null) {
this.right.infixOrder();
}
}
// 后序遍历
public void postOrder() {
if(this.left != null) {
this.left.postOrder();
}
if(this.right != null) {
this.right.postOrder();
}
System.out.print(this.data + " ");
}
}