我试图从文件中读取数字,然后将这些数字放入二叉树中。我尝试将数字文件读入一个数组,然后使用该数组将我的数字传输到我的二叉树。我目前有一个treeNode类(下面)和一个树类(也在下面)
package com.company;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Scanner;
public class treeNode
{
public int data;
public treeNode left, right;
public int frequency;
public treeNode(int data)
{
this.data = data;
this.left = null;
this.right = null;
}
public int getData() {
Scanner in = new Scanner(System.in);
System.out.println("Enter file name: ");
String fileName = in.nextLine();
String line = null;
try
{
FileReader fileReader = new FileReader(fileName);
BufferedReader bufferedReader = new BufferedReader(fileReader);
while ((line = bufferedReader.readLine()) != null)
{
System.out.println(line);
}
}
catch (FileNotFoundException e)
{
System.out.println(e);
}
catch (java.io.IOException e)
{
System.out.println("io");
}
ArrayList<Integer> numFile = new ArrayList<>();
while (in.hasNext())
{
numFile.add(in.nextInt());
}
return data;
}
public treeNode getLeft() {
return left;
}
public treeNode getRight() {
return right;
}
public void setLeft(treeNode left) {
this.left = left;
}
public void setRight(treeNode right) {
this.right = right;
}
树型类
package com.company;
public class tree
{
public treeNode root;
public tree()
{
root = null;
}
private void buildBinaryTree(int[] list)
{
treeNode temp;
for (int data:list) {
if (root == null) {
root = new treeNode(data);
}
else {
temp = root;
boolean searching = true;
while(searching)
{
if (temp.getData() > data) {
if (temp.getLeft() != null) {
temp = temp.getLeft();
} else {
searching = false;
}
} else {
if (temp.getRight() != null) {
temp = temp.getRight();
} else {
searching = false;
}
}
}
if (temp.getData() > data)
{
temp.setLeft(new treeNode(data));
} else {
temp.setRight(new treeNode(data));
}
}
}
}
}
我不知道如何用文件中的数字构建二叉树。感谢你能给我的任何帮助。
发布于 2017-04-13 04:47:25
我建议单独开发每个组件。您可以将其视为一个完全独立的项目的集合,这些项目将构建为实现您正在寻找的功能。我建议采取以下步骤:
首先构建您的泛型Node
类和Tree
类,而不必担心文件I/O。
作为其中的一部分,使用从main()
静态提供的数据,在Tree类中实现一个干净的void add(final int data)
。测试调用将如下所示:
tree.add(4);
tree.add(2);
... etc.
接下来,展开树以包含一个addList()
public void addList(final List<Integer> list) {
for (final int value : list) {
this.add(value);
}
}
或者,如果您了解/使用/关心Java 8,您可以跳过该循环并执行以下操作:
list.forEach(value -> this.add(value));
最后,创建一个单独的类FileReader
或FileUtils
,它实现了实用方法:
public static List<Integer> getValuesFromFile(final String path) {
// open file, read values, put into list, return it
}
现在,在构建树的代码中,您只需将这些组件拼凑在一起:
Tree tree = new Tree();
tree.addList(FileUtils.getValuesFromFile("koolFile.txt"));
tree.has(5) // etc.. other tree calls here
哦对了。我还应该注意到,文件中项的顺序足以说明它是如何构造的。实际上,您只需要节点值,而不需要链接信息。这将极大地简化文件逻辑。
https://stackoverflow.com/questions/43383578
复制相似问题