有这样一棵树,每个节点都存储一个数据,两个指针指向其左右孩子。
前中后序遍历如下:
package com.yc.algorithm.tree;
import java.util.Scanner;
/**
* 二叉树建立及遍历
* @author yc
*/
public class BinaryTree {
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
int level = 1;
BiTree root = createBiTree();
System.out.println("\n前序遍历 : ");
preOrder(root, level);
System.out.println("\n中序遍历: ");
midOrder(root, level);
System.out.println("\n后序遍历 : ");
lastOrder(root, level);
}
/**
* 前序遍历
* @param node
* @param level
*/
private static void preOrder(BiTree node, int level) {
if (node != null) {
System.out.println(node.value + "是第" + level + "层的节点");
preOrder(node.lChild, level + 1);
preOrder(node.rChild, level + 1);
}
}
/**
* 中序遍历
* @param node
* @param level
*/
private static void midOrder(BiTree node, int level) {
if (node != null) {
preOrder(node.lChild, level + 1);
System.out.println(node.value + "是第" + level + "层的节点");
preOrder(node.rChild, level + 1);
}
}
/**
* 后序遍历
* @param node
* @param level
*/
private static void lastOrder(BiTree node, int level) {
if (node != null) {
preOrder(node.lChild, level + 1);
preOrder(node.rChild, level + 1);
System.out.println(node.value + "是第" + level + "层的节点");
}
}
/**
* 创建二叉树,传入节点,从键盘接受一个值,
* 若不是"#",则将该值存到该节点,递归给其左右子树初始化。
* 用户在输入时只需按照前序遍历的顺序输入各值即可。
* @return
*/
private static BiTree createBiTree() {
BiTree node = null;
String str = scanner.next();
if ("#".equals(str)) {
return node;
} else {
node = new BiTree(str);
node.lChild = createBiTree();
node.rChild = createBiTree();
}
return node;
}
}
class BiTree {
Object value;
BiTree rChild;
BiTree lChild;
public BiTree(Object value) {
this.value = value;
}
}
输入如下 :
A
B
#
#
C
#
#
输出如下:
前序遍历 :
A是第1层的节点
B是第2层的节点
C是第2层的节点
中序遍历:
B是第2层的节点
A是第1层的节点
C是第2层的节点
后序遍历 :
B是第2层的节点
C是第2层的节点
A是第1层的节点