掌握二叉树的链式存储结构,并且掌握如何对树进行前、中、后序遍历
具体的项目结构:
程序设计思路:
ü 定义二叉链表结点类型BitreeNode
ü 定义二叉链表类Bitree,实现二叉树的创建及遍历功能
ü 定义测试类Test
ü 调试源代码。
BitreeNode:
package ds.bitree;
/**
* 二叉链表结点类型
* @author 1
*
*/
public class BitreeNode {
//私有属性:数据data
private Object data;
//左指针域lchild
//右指针域rchild
public BitreeNode lchild,rchild;
//构造方法
public BitreeNode() {
super();
}
public BitreeNode(Object data) {
super();
this.data = data;
}
public BitreeNode(Object data, BitreeNode lchild, BitreeNode rchild) {
super();
this.data = data;
this.lchild = lchild;
this.rchild = rchild;
}
//set和get方法
public Object getData() {
return data;
}
public BitreeNode getLchild() {
return lchild;
}
public void setLchild(BitreeNode lchild) {
this.lchild = lchild;
}
public BitreeNode getRchild() {
return rchild;
}
public void setRchild(BitreeNode rchild) {
this.rchild = rchild;
}
定义二叉链表类Bitree,实现二叉树的创建及遍历功能:
package ds.bitree;
import java.util.Scanner;
/**
* 二叉树类型
*
* @author 1
*
*/
public class Bitree {
// 私有属性:树根root
private BitreeNode root;
// 构造方法
// 空树
public Bitree() {
super();
}
// 一棵树
public Bitree(BitreeNode root) {
super();
this.root = root;
}
// set和get方法
public BitreeNode getRoot() {
return root;
}
public void setRoot(BitreeNode root) {
this.root = root;
}
// 创建二叉树creatTree
public void creatTree() throws Exception {
BitreeNode s;
BitreeNode[] Q = new BitreeNode[30];
int front = 1, rear = 0;
Scanner in = new Scanner(System.in);
System.out.println("请输入二叉树的结点数据:");
String data = in.next();
for (int i = 0; i < data.length(); i++) {
s = null;
char c = data.charAt(i);
if (c != '@') {// 判断是否为虚结点
s = new BitreeNode(c);
s.setLchild(null);
s.setRchild(null);
}
Q[++rear] = s;// 把S入队,存入rear指示的位置。
if (rear == 1 && s == null) {// 若rear等于1并且S等于null
throw new Exception("输出的字符不合法");
}
if (rear == 1) {
root = s;// s为根
} else {
// rear不等于1
if (Q[front] != null && s != null) {
// 若双亲和孩子均存在,则根据rear值设置左右孩子
if (rear % 2 == 0) {
Q[front].setLchild(s);
} else {
Q[front].setRchild(s);
}
}
if (rear % 2 != 0) {
// 若rear为奇数,则front++
front++;
}
}
}
}
// 前序遍历二叉树
public void preOrder(BitreeNode bt) {// DLR
if (bt == null)
return;
System.out.print(bt.getData() + " ");
preOrder(bt.getLchild());
preOrder(bt.getRchild());
}
// 中序遍历二叉树
public void inOrder(BitreeNode bt) {// LDR
if (bt == null)
return;
inOrder(bt.getLchild());
System.out.print(bt.getData() + " ");
inOrder(bt.getRchild());
}
// 后序遍历二叉树
public void postOrder(BitreeNode bt) {// LRD
if (bt == null)
return;
postOrder(bt.getLchild());
postOrder(bt.getRchild());
System.out.print(bt.getData()+" ");
}
}
测试类test:
package ds.bitree;
/**
* 调用方法执行操作
* @author 1
*
*/
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Bitree tree=new Bitree();
tree.creatTree();
System.out.print("前序遍历序列为:");
tree.preOrder(tree.getRoot());
System.out.print("\n中序遍历序列为:");
tree.inOrder(tree.getRoot());
System.out.print("\n后序遍历序列为:");
tree.postOrder(tree.getRoot());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果截图:
本文章仅供学习和参考,如果发现有问题的地方还请大家多多指正!