我需要根据下面给出的规范构建一个族谱。希望它是Java的吗

我需要根据下面给出的规范构建一个族谱。希望它是Java的吗,java,tree,Java,Tree,输入将如下所示: 父项名称子项数量子项名称以空格分隔 终止 下一个输入中的行数 祖先子女 例如: 希纳2号基尚金贾 基山1号安什 结束 一, 金加尔·安什 在这里,如示例所示,我们可以采用多行输入,并且输入端被终止。然后我们给出一个数字,指定下一个输入中有多少行。 下一个输入询问kinjal是否是ansh的祖先。 输出应该是NO 有人能帮忙吗 我创建了两个单独的列表,其中包含编号和名称。我完全迷路了,请帮帮我 import java.util.ArrayList; import java.uti

输入将如下所示:

父项名称子项数量子项名称以空格分隔 终止 下一个输入中的行数 祖先子女

例如:

希纳2号基尚金贾

基山1号安什

结束

一,

金加尔·安什

在这里,如示例所示,我们可以采用多行输入,并且输入端被终止。然后我们给出一个数字,指定下一个输入中有多少行。 下一个输入询问kinjal是否是ansh的祖先。 输出应该是NO

有人能帮忙吗

我创建了两个单独的列表,其中包含编号和名称。我完全迷路了,请帮帮我

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

class test3
{

    //static int index;

    public static void main(String[] args)
    {
        List<String> temp=new ArrayList<>();
        ArrayList<String> words=new ArrayList<>();
        ArrayList<Integer> number=new ArrayList<>();
        String t="";
        String t1="END";
        String rootfromlist="";

        Scanner scan=new Scanner(System.in);
        while (scan.hasNext())
        {
            t=scan.next();
            if(t.equals(t1)) {
                break;
            } else {
                temp.add(t);
            }
        }

        String[] temp2=new String[temp.size()];

        for(int i=0;i<temp2.length;i++)
        {
            temp2[i]=temp.get(i);
        }

        Iterator<String> itr=temp.iterator();

        String regex="[0-9]+";
        int i=0,j=0;

        while(itr.hasNext())
        {
            temp2[i]=(String)itr.next();
            if(temp2[i].matches(regex))
            {
                number.add(Integer.parseInt(temp2[i]));
                i--;
                j++;
            }
            else
            {
                words.add(temp2[i]);
            }
            i++;
        }

        Iterator itr2=number.iterator();

        while(itr2.hasNext())
        {
            System.out.println(itr2.next());
        }

        System.out.println(number.get(0));

        List<String> wodupli=words.stream().distinct().collect(Collectors.toList());
        ArrayList<String> a=new ArrayList<>();
        boolean prev=false;
        int index=0;
        String tt="null";

        //here i am trying to make list "a" such that as array of binary tree. that is then i will able to access children of node by formula 2*i+1 and 2*i+2. but the logic id not correct

        for(int k=0;k<number.size();k++)
        {
            if(number.get(k)==2)
            {
                if(prev==false)
                {
                    a.add(wodupli.get(index));
                    a.add(wodupli.get(2*index+1));
                    a.add(wodupli.get(2*index+2));
                }
                if(prev==true)
                {

                    a.add(wodupli.get(index-1));
                    a.add(wodupli.get(2*index));
                    a.add(wodupli.get(2*index+1));

                }
                index=index+3;
                prev=false;
            }
            if(number.get(k)==1)
            {
                a.add(wodupli.get(index));
                a.add(wodupli.get(index+1));
                a.add(tt);

                index+=3;
                prev=true;
            }
        }

        for(int l=0;l<a.size();l++)
        {
            System.out.println(a.get(l));
        }
    }
}

我想知道如何动态创建树。因为这里的二叉树逻辑不起作用

好的,您的问题似乎是不知道要使用什么数据结构

正如您所了解的,二进制搜索树不是您所需要的:

二叉搜索树是用来用一个键查找东西的。树表示键和值之间的关系。您希望表示值之间的关系;i、 e.家谱中的人

家谱不是二元的。一个人可以有两个以上的孩子

所以,您实际上需要做的是设计一个代表一个人的类:让我们称它为person。一个人需要至少表现出以下关于该人的事情:

姓名 这个人的孩子。。。可以是列表或数组
其次,您需要某种映射数据结构,将人名映射到其person对象。你可以用地图来做这个

接下来,您需要一些代码来读取输入文件,创建人员记录并填充地图。代码还应该将个人记录链接到家谱中

最后,您将需要一些简单的代码来回答以下问题:A是B的祖先吗。。。这可以通过递归地在树上行走一段时间来回答


坏消息是,您编写的大部分代码可能需要扔掉。好消息是,新代码将更符合逻辑/更容易理解。

展示您尝试过的内容,并详细说明解决方案的错误之处。所以,这不是一个编码服务。请先尝试自己,如果你得到任何错误,然后张贴在这里,我们将帮助你解决这个问题,尝试自己编码。我认为这里最困难的部分是正确地分割输入。将其存储在合适的类型树映射或其他东西中应该很容易。所以,开始编码,告诉我们你做了什么,代码中什么不起作用,不知道从哪里开始可能会瘫痪,我知道,在那里,做了那件事。一件重要的事情是做一些事情,它并不总是正确的,但它可能会引导你找到更好的答案。想到的事情;扫描器,由于格式比较简单,是众所周知的字符串,int,n系列可选字符串。另一种更为暴力的方法是使用Stringsplit将其分解为单独的值,这些值更易于解析。因此,不要试图解决整个问题,分解并解决每个部分,首先要弄清楚如何解析文本的第一行好吧。。。我不介意扔掉我的密码。。谢谢你的帮助。。我将尝试使用u建议的逻辑,您将需要某种映射数据结构,将人名映射到其person对象。你可以用地图来做这个。由于人名已经包含在person中,我更喜欢所有person对象的简单集合,请按照我在@c0der中的建议说出列表谢谢您的帮助!