首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将数字文件转换为二叉树Java

将数字文件转换为二叉树Java
EN

Stack Overflow用户
提问于 2017-04-13 04:34:44
回答 1查看 375关注 0票数 1

我试图从文件中读取数字,然后将这些数字放入二叉树中。我尝试将数字文件读入一个数组,然后使用该数组将我的数字传输到我的二叉树。我目前有一个treeNode类(下面)和一个树类(也在下面)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
}

树型类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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));
            }
        }
    }
}
}

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

EN

回答 1

Stack Overflow用户

发布于 2017-04-13 04:47:25

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

首先构建您的泛型Node类和Tree类,而不必担心文件I/O。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tree.add(4);
tree.add(2);
... etc.

接下来,展开树以包含一个addList()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void addList(final List<Integer> list) {
    for (final int value : list) {
        this.add(value);
    }
}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
list.forEach(value -> this.add(value));

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static List<Integer> getValuesFromFile(final String path) {
    // open file, read values, put into list, return it
}

现在,在构建树的代码中,您只需将这些组件拼凑在一起:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Tree tree = new Tree();
tree.addList(FileUtils.getValuesFromFile("koolFile.txt"));

tree.has(5) // etc.. other tree calls here

哦对了。我还应该注意到,文件中项的顺序足以说明它是如何构造的。实际上,您只需要节点值,而不需要链接信息。这将极大地简化文件逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43383578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文