本程序分为四个文件:
节点类:Node.java
二叉树类:BinaryTree.java
访问类:Visit.java
主类测试:MainTest.java
(1)Node.java
public class Node<T> {
public T data;
private Node<T> left;
private Node<T> right;
// 初始化构造
public Node() {
left = null;
right = null;
}
public Node(T tt, Node<T> lef, Node<T> rig) {
data = tt;
left = lef;
right = rig;
}
// get方法
public T getT() {
return data;
}
public Node<T> getLeft() {
return left;
}
public Node<T> getRight() {
return right;
}
}
(2)BinaryTree.java
public class BinaryTree<T> {
private Node<T> root;
private void preOrder(Node<T> t, Visit vs) {
if (t != null) {
vs.print(t.data);
preOrder(t.getLeft(), vs);
preOrder(t.getRight(), vs);
}
}
private void midOrder(Node<T> t, Visit vs) {
if (t != null) {
midOrder(t.getLeft(), vs);
vs.print(t.data);
midOrder(t.getRight(), vs);
}
}
private void postOrder(Node<T> t, Visit vs) {
if (t != null) {
postOrder(t.getLeft(), vs);
postOrder(t.getRight(), vs);
vs.print(t.data);
}
}
public BinaryTree() {
root = null;
}
public BinaryTree(T tt, BinaryTree<T> lef, BinaryTree<T> rig) {
Node<T> l, r;
if (lef == null)
l = null;
else
l = lef.root;
if (rig == null)
r = null;
else
r = rig.root;
root = new Node<T>(tt, l, r);
}
public void preOrder(Visit vs) {
preOrder(root, vs);
}
public void midOrder(Visit vs) {
midOrder(root, vs);
}
public void postOrder(Visit vs) {
postOrder(root, vs);
}
}
(3)Visit.java
public class Visit {
public void print(Object item) {
System.out.print(item + " ");
}
}
(4)MainTest.java
public class MainTest {
public static void main(String[] args) {
BinaryTree<String> g = new BinaryTree<String>("G", null, null);
BinaryTree<String> d = new BinaryTree<String>("D", null, g);
BinaryTree<String> b = new BinaryTree<String>("B", d, null);
BinaryTree<String> e = new BinaryTree<String>("E", null, null);
BinaryTree<String> f = new BinaryTree<String>("F", null, null);
BinaryTree<String> c = new BinaryTree<String>("C", e, f);
BinaryTree<String> a = new BinaryTree<String>("A", b, c);
Visit vs = new Visit();
System.out.println("前序遍历的结果是:");
a.preOrder(vs);
System.out.println();
System.out.println("中序遍历的结果是:");
a.midOrder(vs);
System.out.println();
System.out.println("后序遍历的结果是:");
a.postOrder(vs);
System.out.println();
}
}
(5)测试结果
前序遍历的结果是:
A B D G C E F
中序遍历的结果是:
D G B A E C F
后序遍历的结果是:
G D B E F C A