理论不说了,直接上代码
首先是定义一个结点类
public class Node {
String data;
Node left;
Node right;
public Node(String d) {
this.data = d;
this.left = null;
this.right = null;
}
public Node() {
this.data = null;
this.left = null;
this.right = null;
}
}
这里没有封装,只是简单的表示结点的数据结构
树类
public class Tree {
//创建根节点
Node root = new Node();
//创建一棵二叉树
public Node create(Node node) {
Scanner sc = new Scanner(System.in);
String value = sc.next();
if (value.trim().equals("#")) {
node = null;
} else {
node = new Node();
node.data = value;
node.left = create(node.left);
node.right = create(node.right);
return node;
}
return node;
}
//先序遍历
public void PreOrder(Node node) {
if (node != null) {
System.out.print(node.data + " ");
PreOrder(node.left);
PreOrder(node.right);
}
}
//中序遍历
public void InOrder(Node node) {
if (node != null) {
InOrder(node.left);
System.out.print(node.data + " ");
InOrder(node.right);
}
}
//后序遍历
public void PostOrder(Node node) {
if (node != null) {
PostOrder(node.left);
PostOrder(node.right);
System.out.print(node.data + " ");
}
}
}
注意:如果在在判断输入是否为"#",不能使用==,详见Java中==和equals的区别
测试类:
public class TreeTest {
public static void main(String[] args) {
Tree tree = new Tree();
//先序遍历创建 :根左右
tree.root = tree.create(tree.root);
//先序遍历
System.out.println("先序遍历");
tree.PreOrder(tree.root);
System.out.println();
System.out.println("中序遍历");
tree.InOrder(tree.root);
System.out.println();
System.out.println("后序遍历");
tree.PostOrder(tree.root);
}
}
如果我们建立一个这样的二叉树
那么它的输入为: ABD##FE###CG#H##I##
输出结果:
先序遍历
A B D F E C G H I
中序遍历
D B E F A G H C I
后序遍历
D E F B H G I C A