Реализация.txt файла в 2-3 дерева

Ладно, у меня опять проблемы с мышлением (на этот раз я болен). Мне нужно внедрить файл.txt в 2-3 дерева, на основе которых я и сделал.

Мой класс Node

package kth.id2010.lab.lab04;

public class Node {
    boolean isLeaf = false; 
    int numberOfKeys;
    String[] keys = new String[2]; //each node can contain up to 2 keys
    int[] key1Values = new int[2]; //every key contains 2 values
    int[] key2Values = new int[2]; //every key contains 2 values
    Node[] subtrees = new Node[3]; //every node can contain pointers to 3 different nodes
    Node[] parent = new Node[1]; //every node contains a pointer to a parent node, if root parent      is null

    Node(Node n) {
        n.numberOfKeys = 0;
        n.isLeaf = true;
    }
}

Класс моего дерева

package kth.id2010.lab.lab04;

public class Tree {

    Node root; // root node of the tree
    int n; // number of elements in the tree

    private Tree(){
        root = new Node(root);
        n = 0;
        root.parent = null;
    }
    //Return the values of the key if we find it
    public int[] get(Node n, String key){
        if(n.isLeaf){
            if(n.keys[0].equals(key)){
                return(n.key1Values);
            }
            else if(n.keys[1].equals(key)){
                return(n.key2Values);
            }
            else{
                return null;
            }
        }
        else if(key.length() < n.keys[0].length()){
            return(get(n.subtrees[0],key));
        }
        else if(n.numberOfKeys == 2 && key.length() < n.keys[1].length()){
            return(get(n.subtrees[1],key));
        }
        else{
            return(get(n.subtrees[2],key));
        }
    }
    //put new values to the key
    public void put(Node n, int[] value, String key){
        if(n.keys[0].equals(key)){
            n.key1Values = value;
        }
        else if(n.keys[1].equals(key)){
            n.key2Values = value;
        }
        else if(n.keys[0].length() < key.length()){
            put(n.subtrees[0],value,key);
        }
        else if(n.numberOfKeys == 2 && n.keys[1].length() < key.length()){
            put(n.subtrees[1],value,key);
        }
        else{
            put(n.subtrees[2],value,key);
        }
    }

    public int size(){
        return(this.n);
    }
}

И мой водительский класс

package kth.id2010.lab.lab04;


import edu.princeton.cs.introcs.In;
import java.net.URL;

public class Driver {

    public static void main(String[] args) {
        URL url = Driver.class.getResource("/kap1.txt");
        System.out.println(System.getProperty("user.dir"));
        In input = new In(url);
        String[] usedWords;

        while(!input.isEmpty()){
            String line = input.readLine().trim();
            String[] words = line.split(" ");
            for (String word : words) {
                System.out.println(word);
            }
        }

    }
}

Так что для моего назначения каждое слово в words это 1 ключ, keyValue1[0]номер вхождения = индекс в words а также keyValue1[1] это количество вхождений. Так что я думал, что для каждого слова в wordsЯ добавляю его в узел и добавляю номер индекса в качестве первого значения, а затем добавляю слово в usedWords и проверьте, сколько раз это слово в words, Единственное, с чем я застрял, - это как добавить его в качестве узла и попытаться отсортировать его, и поместить больший узел, который был до того, как он стал родителем.

0 ответов

Другие вопросы по тегам