Вставка нового узла в двоичном дереве в указанный узел c внутри дерева - PullRequest
0 голосов
/ 21 января 2020

Мне нужно создать функцию: publi c stati c BinaryTree getFamilyTree (String path). Путь String - это местоположение внутри компьютера

Я использую сканер и средство чтения файлов для чтения этих строк и добавление их с помощью split (,) like, this = {"like", "this"} в массив String и размещение этих строк в качестве данных узла.

public static BinaryTree getFamilyTree(String path) {
    File fr = new File(path);
    BinaryTree bt = new BinaryTree();
    try {
        Scanner sc =new Scanner(fr);
        while(sc.hasNext())
        {
            String st = sc.nextLine();
            String [] carry = st.split(",");
            BTNode [] he = new BTNode [3];
            for (int j = 0; j < carry.length; j++) {
                he[j] = new BTNode(carry[j]);
            }
            LinkedList role = new LinkedList();
            role.AddFirst(carry[0]);
            if(bt.getRoot()==null)
                bt.setRoot(he[0]);
            if(contains(role, bt)){
                if(SearchB(bt.getRoot(), he[0].getData()) != null) {
                    if(carry.length == 3) {
                        if (bt.getRoot().getLeft() == null) 
                        {
                            bt.getRoot().setLeft(new BTNode(carry[2]));
                            bt.getRoot().getLeft().setParent(bt.getRoot());}
                        if (bt.getRoot().getRight() == null)
                        {
                            bt.getRoot().setRight(new BTNode(carry[2]));
                            bt.getRoot().getRight().setParent(bt.getRoot());}
                    }
                    else if(carry.length == 2) 
                    {
                         if(bt.getRoot().getLeft() == null) {
                            bt.getRoot().setLeft(new BTNode(carry[1]));
                            bt.getRoot().getLeft().setParent(bt.getRoot());}
                    }

                }
            }
        }} catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return bt;
    }

** файл, например: ** (Parent, LeftChild, RightChild)

  • Папа Смурф, Здоровенный Смурф, Ворчливый Смурф
  • Ворчливый Смурф, Джокей Смурф, Тщеславие Смурф
  • Джокей Смурф, Жадный Smurf, Handy Smurf
  • Здоровенный Smurf, Brainy Smurf, Painter Smurf
  • Handy Smurf, Farmer Smurf
  • Brainy Smurf, Snappy Smurfling, Slouchy Smurfling

Имена не имеют для меня никакого значения, за исключением одной вещи, имена которых стоят первыми в строке, которые относятся к родительскому узлу

Я использую сканер и средство чтения файлов для чтения этих строк и добавления их с помощью split (,) как это в массив String и положить эти строки как данные узла.

У меня проблемы с добавлением узлов туда, куда я хочу. потому что мне нужно найти узел, а затем добавить его детей.

public static BTNode SearchB(BTNode root, String data) 
{ 
    if (null == root || null == data) return root;
    String rootStr = root.getData();
    if (rootStr.compareToIgnoreCase(data) == 0) return root;
    BTNode left = SearchB(root.getLeft(), data);
    if(null != left) return left;
    BTNode right = SearchB(root.getRight(), data);
    if (null != right) return right;
    return null;
}

Я использую этот код для поиска в BinaryTree для определенных c данных внутри дерева - данные, которые я ищу for - это родительское имя, поэтому я могу добавить его детей в соответствии с файлом

большое спасибо, извините за длинный вопрос:)

...