首先创建三个类,分别是节点类、二叉树类、测试类
节点类:
public class Node <T>{
T data; //储存结点数据
Node<T> lChild,rChild; //定义两个泛型的子节点
public Node(T x){
data=x;
lChild=rChild =null;
}
}
二叉树类
public class BinaryTree<T> { //二叉树类
Node<T> root; //用于存储二叉树的根节点
public BinaryTree(){ //用于创建一个空的二叉树
this.root=null;
}
private int i =0;
public Node<T> create(T[] prelist){ //该方法用于递归构建二叉树
// 接收一个泛型类的数组,返回一个泛型类的结点
Node<T> root = null; //定义局部变量,用于存储当前递归步骤创建的节点
if(i<prelist.length){
T elem = prelist[i]; //将数组索引位置的元素赋值给elem
i++;
if(!elem.equals("#")){ //判断当前节点是否为空节点
root = new Node<>(elem); //创建一个新节点值为elem,然后赋值给root
root.lChild = create(prelist);
root.rChild = create(prelist);
}
}
return root;
}
public BinaryTree(T[] prelist){
this.root = create(prelist);
}
//先序
public void preorder(Node<T> root){
if(root==null){
return;
}else{
System.out.print(root.data+" ");
preorder(root.lChild);
preorder(root.rChild);
}
}
//中序
public void inorder(Node<T> root){
if(root==null)
return;
else{
inorder(root.lChild);
System.out.print(root.data+"");
inorder(root.rChild);
}
}
//后序
public void postorder(Node<T> root){
if(root==null)
return;
else{
postorder(root.lChild);
postorder(root.rChild);
System.out.print(root.data+" ");
}
}
}
测试类:
首先及那个获取的用户输入序列拆分为字符数组,然后创建二叉树对象,将字符数组作为参数传入构造函数,在构造函数内根据数组元素的位置创建二叉树的节点,构建二叉树结构
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("输入一个序列(用#表示空树):");
String input =sc.nextLine().trim(); //读取输入的字符串并去掉首尾空格,赋值给变量input
String[] preArray = input.split("");//字符串按字符拆分,存储到字符串数组中
BinaryTree<String> binaryTree = new BinaryTree<>(preArray);//将preArray作为参数,创建一个二叉树
System.out.println("先序遍历结果:");
binaryTree.preorder(binaryTree.root);
System.out.println("\n中序遍历结果:");
binaryTree.inorder(binaryTree.root);
System.out.println("\n后序遍历结果:");
binaryTree.postorder(binaryTree.root);
}
}