gpt4 book ai didi

java - Java 中的数字文件到二叉树

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:53 26 4
gpt4 key购买 nike

我正在尝试从文件中读取数字,然后将它们放入二叉树中。我正在尝试将数字文件读入数组,然后使用该数组将数字传输到二叉树。我目前有一个 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));
}
}
}
}
}

我不知道如何使用文件中的数字构建二叉树。我感谢您能给我的任何帮助。

最佳答案

我建议单独开发每个组件。您可以将其视为完全独立的项目的集合,这些项目将逐步实现您正在寻找的功能。我建议采取以下步骤:

首先构建通用 Node 类和 Tree 类,而不必担心文件 I/O。

作为其中的一部分,使用您从 main() 静态提供的数据在 Tree 类中实现一个干净的 void add(final int data)。您的测试调用将如下所示:

tree.add(4);
tree.add(2);
... etc.

接下来,展开 Tree 以包含 addList():

public void addList(final List<Integer> list) {
for (final int value : list) {
this.add(value);
}
}

或者,如果您了解/使用/关心 Java 8,您可以跳过循环并执行以下操作:

list.forEach(value -> this.add(value));

最后,创建一个单独的类,FileReaderFileUtils,它实现实用程序方法:

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

哦,对了。我还应该注意,文件中项目的顺序足以决定它的构造方式。实际上,您只需要节点值,而不需要链接信息。这将显着简化文件逻辑。

关于java - Java 中的数字文件到二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43383578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com