java--从txt⽂件中读取完全⼆叉树数据建⽴⼆叉树并打印出遍
历结果
详细看注释:
import java.io.*;
import javax.swing.JOptionPane;
import java.util.*;
/**
* 功能:读⼊⽂件⾥的数据存⼊⼆叉树中,然后进⾏3种⽅式的遍历
norm是什么意思*
* 参考资料0:数据结构(C语⾔版)严蔚敏
*/
/
**
* 外部类:节点
*
* @author ocaicai@yeah @date: 2011-5-17
*
*/
class Node {
Node leftChild;
风中奇缘主题曲
Node rightChild;
int data;
Node(int newData) {
leftChild = null;
rightChild = null;
rusk
data = newData;
}
}
class BinTreeTraver{
怎样画彩妆List<Node> nodeList = null;
public void createBinTree(int array[],int array_length) {
nodeList = new LinkedList<Node>();
// 将⼀个数组的值依次转换为Node节点
inbrandfor (int nodeIndex = 0; nodeIndex < array_length; nodeIndex++) {
nodeList.add(new Node(array[nodeIndex]));
闺蜜日是几月几号}
// 对前lastParentIndex-1个⽗节点按照⽗节点与孩⼦节点的数字关系建⽴⼆叉树
for (int parentIndex = 0; parentIndex < array_length / 2 - 1; parentIndex++) {
<(parentIndex).leftChild = (parentIndex * 2 + 1);// 左孩⼦
<(parentIndex).rightChild = (parentIndex * 2 + 2);// 右孩⼦
}
// 最后⼀个⽗节点:因为最后⼀个⽗节点可能没有右孩⼦,所以单独拿出来处理
int lastParentIndex = array_length/ 2 - 1;
<(lastParentIndex).leftChild = (lastParentIndex * 2 + 1);// 左孩⼦
if (array_length % 2 == 1) {//右孩⼦,如果数组的长度为奇数才建⽴右孩⼦
<(lastParentIndex).rightChild = (lastParentIndex * 2 + 2);
}
}
/**
* 先序遍历
*
* 这三种不同的遍历结构都是⼀样的,只是先后顺序不⼀样⽽已
*
* @param node
* @param node
* 遍历的节点
*/
public static void preOrderTraver(Node node){
if (node == null)
return;
System.out.print(node.data + " ");
preOrderTraver(node.leftChild);
preOrderTraver(node.rightChild);
}
/**
* 中序遍历
*
gre考试地点
* 这三种不同的遍历结构都是⼀样的,只是先后顺序不⼀样⽽已 *
* @param node
* 遍历的节点
*/
public static void inOrderTraver(Node node) {
if (node == null)
return;
inOrderTraver(node.leftChild);
System.out.print(node.data + " ");
inOrderTraver(node.rightChild);
}
/
腾讯开心鼠英语**
* 后序遍历
*
* 这三种不同的遍历结构都是⼀样的,只是先后顺序不⼀样⽽已 *
* @param node
* 遍历的节点
*/
public static void postOrderTraver(Node node) {
if (node == null)
return;
postOrderTraver(node.leftChild);
postOrderTraver(node.rightChild);
System.out.print(node.data + " ");
}
}
class Example8_1{
public static void main(String[] args) {
byte buffer[] = new byte[2056];
int array[]=new int[100];
int node_num,j=0,c=0;
int bytes;
String str;
String str1;
try{
File file = new File(args[0]);
FileInputStream fileInput = new FileInputStream(file);
bytes = ad(buffer);
System.out.println("The total bytes number is:"+bytes);
//从缓冲数组buffer[]取出数据存⼊整型数组array[]
for(int i=0;i<bytes;i++){
if(buffer[i]=='\n'){
System.out.println("遇到换⾏符退出数据提取");
break;
}el if(buffer[i]!=' '){
j=j*10+(buffer[i]-'0');
}el{
}el{
array[c]=j;
++c;
j=0;
}
}
System.out.println("打印数组内的数据:");
for(int i=0;i<c;i++){
System.out.print(array[i]+" ");
}
//建⽴⼆叉树以及遍历
System.out.println();
System.out.println("\n⼆叉树建⽴以及遍历:");
BinTreeTraver binTree = new BinTreeTraver();
// nodeList中第0个索引处的值即为根节点
Node root = (0);
System.out.println("先序遍历:");
binTree.preOrderTraver(root);
System.out.println();
System.out.println("中序遍历:");
binTree.inOrderTraver(root);
System.out.println();
System.out.println("后序遍历:");
betobinTree.postOrderTraver(root);
}
catch(Exception e){
str = e.toString();
}
}
}
txt⽂件数据格式见下;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
测试⽤满⼆叉树存储数据⽂件。
read me : 存储完全⼆叉树的数据只能在第⼀⾏,⽽且每个数据后必须跟⼀个空格,第⼀⾏不能出现数字字符和空格字符以外的字符。
考研数学三国家线
运⾏举例:
java Example8_