Сортировка дерева массивов списков и добавление строк двоичного кода - PullRequest
0 голосов
/ 10 декабря 2011

В настоящее время работает над программой для стимулирования дерева, сделанного из arrayList строк, состоящих из случайных 0 и 1. Каждый узел имеет ограничение на количество значений, которые он может хранить, а корень всегда заполняется первыми значениями node.size. И любые значения после должны идти к левому или правому дочернему элементу (в зависимости от того, является ли это значением 0 или 1) 0 = слева 1 = справа. По мере роста дерева каждый уровень оценивается по индексу высоты дерева.

УЗЕЛ КЛАСС

public class Node {
    public ArrayList<String> elements;
    public Node leftC;
    public Node rightC;
    private String data;
    int size = 5; //size limit of the Arraylist in each node


    public Node(s){
        elements = new ArrayList<String>();
        elements.add(s);
    }

    public void addString(String s){
        elements.add(s);
    }
}

ДЕРЕВО КЛАСС

public void insert(String s){

    root = insert(root,s);
}
private Node insert(Node n, String s){

    if (n == null){
        n = new Node(s);
    } else if (!n.isFull()){
        n.addString(s);
    } else {
        if (s.charAt(0) == '0'){
            n.leftC = insert(n.leftC,s);
        } else if (s.charAt(0) == '1'){
            n.rightC = insert(n.rightC,s);
        }
    }
    return (n);
}

Edit: Спасибо за вклад, я воспользовался советом и реализовал рекурсивную функцию для этого. Дерево теперь вроде работает ... Оно правильно добавляет первые значения Node.size в массив и отправляет остальное его дочерним элементам на основе 0 или 1.

Example:
Root node:
[1011001001, 1011101101, 1111011011, 1011011101, 0101111011]

Left Child Node [0111001000, 0111111111, 0010101010, 0100000000, 0011010000]
Right Child Node [1111011111, 1011010110, 1001101000, 1000001110, 1110000000]

Однако именно здесь я сталкиваюсь с новой проблемой, в которой я полностью застрял.

Если я пойду оценивать дочерние узлы L и R этого нового узла ... кажется, что, поскольку он продолжает оценивать значение для индекса charAt 0, он создает только дерево в форме треугольника

right child @ right [1100000011, 1100000000, 1011100000, 1011011011, 1010101010]
left child @ right - none
right child @ left - none
left child @ left [0010010101, 0010101011, 0110000100, 0011000000, 0010110111]

У меня вопрос: как мне сделать так, чтобы индекс charAt, который будет оцениваться, соотносился с высотой дерева?

Например .. если бы мое дерево было сделано правильно, следующий слой узлов после первого был бы (оцените индекс charAt 1 вместо 0)

right child @ right [1100000011, 1100000000]
left child @ right [1011100000]

right child @ left [0110000100, 0111001000]
left child @ left [0010010101, 0010101011, 0011000000,0010110111,0001110000]

Итак, когда мы продолжим и дерево заполнится в каждом узле, мы оценим его по 3-му индексу и т. Д. Я не уверен, как это реализовать.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2011

Два неуместных (010110010001 и 110100111111) являются единственными, которые добавляются со строкой «шаг 2», поэтому ваша проблема должна быть там.

Судя по всему, вы устанавливаете "runner" в "root":

Node runner;
runner = root;

А потом вы добавляете строки:

runner.leftC = new Node();
runner.addString(s);

Что происходит, так это то, что «runner» все еще равен «root», поэтому ваши элементы добавляются в root.

0 голосов
/ 10 декабря 2011

Ваша основная проблема заключается в том, что вы не устанавливаете runner на соответствующий левый или правый узел после выбора левого или правого пути.

В частности, этот код:

            } else if (runner.leftC==null){
                runner.leftC = new Node();
                runner.addString(s);
                System.out.println("ADDED "+s+" to step 2 LEFT");
                return;
            } 

Вы добавляете строку в предыдущий узел, а не в только что созданный.

Эта ошибка маловероятна, если бы вы использовали рекурсивный метод на узле.

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