Java按先根序列建立二叉树并遍历二叉树
例题:
1.算法按先根序序列建立二叉树的二叉链表算法,按下列顺序读入字符: ABC##DE#G##F###
( 1 )从键盘输入二叉树的结点信息,建立二叉树的存储结构;
( 2 )在建立二叉树的过程中按照二叉树先序方式建立。
2.依次使用二叉树的先根次序、中根次序、后跟次序遍历二叉树。
代码示例:
import java.util.Scanner;
public class Bnodept { //定义二叉树的存储结构
char data;
Bnodept lchild,rchild;
public Bnodept() {
}
public Bnodept(char data) {
this.data=data;
this.lchild=null;
this.rchild=null;
}
public Bnodept(char data,Bnodept lchild,Bnodept rchild) {
this.data=data;
this.lchild=lchild;
this.rchild=rchild;
}
Bnodept crt_bt_pre() { //先根序序列建立二叉树
char ch;
Bnodept bt;
System.out.println("从键盘输入一个字符:");
Scanner in=new Scanner(System.in);
String s1=in.nextLine();
ch=s1.charAt(0); //从键盘输入一个字符
if(ch=='#') { //'#'作为结束标志
return null;
}
else {
bt=new Bnodept(); //产生新结点
bt.data=ch;
bt.lchild=crt_bt_pre();
bt.rchild=crt_bt_pre();
return(bt);
}
}
static void preorder(Bnodept bt) { //先序遍历
if(bt!=null) { //为非空二叉树
System.out.print(bt.data+" "); //访问根结点
preorder(bt.lchild); //先根遍历左子树
preorder(bt.rchild); //先根遍历右子树
}
}
static void inorder(Bnodept bt) { //中序遍历
if(bt!=null) {
inorder(bt.lchild);
System.out.print(bt.data+" ");
inorder(bt.rchild);
}
}
static void postorder(Bnodept bt) { //后序遍历
if(bt!=null) {
postorder(bt.lchild);
postorder(bt.rchild);
System.out.print(bt.data+" ");
}
}
public static void main(String[] args) { //测试结果
Bnodept tree=new Bnodept();
Bnodept bt=tree.crt_bt_pre();
System.out.println("先序遍历:");
preorder(bt);
System.out.println();
System.out.println("中序遍历:");
inorder(bt);
System.out.println();
System.out.println("后序遍历:");
postorder(bt);
}
}
运行截图: