Обход дерева - добавление узла к матрице смежности после выполнения

Я создаю программу обхода дерева, которая позволяет пользователям запускать обходы BFS и DFS, а также добавлять и удалять узлы.

Я застрял на добавлении узлов из-за проблем с расширением матрицы смежности. Для этого примера я хотел бы добавить новый дочерний узел X к родителю H:

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

Клики пользователей Add Node кнопка:

    //try and create and connect node via button
AddButton.addActionListener(new ActionListener() {   
        public void actionPerformed(ActionEvent e)
        {   
            Nodes nX = new Nodes("X", nodeX, nodeY, nodeWidth, nodeHeight);
            appendNode(rootNode, nX);
        }
   });

Какие вызовы appendNode(): предполагается, что эта функция создает новую матрицу смежности с обновленным размером (с учетом дополнительного узла X)... копирование данных из старой матрицы adjMatrixзатем добавляем дополнительный слот для нового узла X,

public void appendNode(Nodes parent, Nodes child) {
    //add new node X to nodeList
    addNode(child);

    //loop through all nodes again to be connected, plus new one... then create new adjMatrix
    int newSize = nodeList.size();

    //make a new adj matrix of the new size...
    int[][] adjMatrixCopy = new int[newSize][newSize];

    int fromNode = nodeList.indexOf(parent);
    int toNode = nodeList.indexOf(child);

    //copy adjMatrix data to new matrix...
    for (int i = 0; i < adjMatrix.length; i++) {    
        for (int j = 0; j < adjMatrix[i].length; j++) {
            adjMatrixCopy[i][j] = adjMatrix[i][j];
        }
    }
    for (int col = 0; col < newSize; col++) {
        adjMatrixCopy[newSize][col] = 1;
    }
//  still need to add newly added node 

//  adjMatrixCopy[fromNode][toNode] = 1;
//  adjMatrixCopy[toNode][fromNode] = 0;
//  adjMatrix = null;
}

Когда я нажимаю appendNodeВыдает эту ошибку:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 12
    at Graph.appendNode(Graph.java:306)
    at Graph$3.actionPerformed(Graph.java:141)

1 ответ

 adjMatrixCopy[newSize][col] = 1;

Это не верно. Может ты хочешь

 adjMatrixCopy[newSize - 1][col] = 1;

вместо?

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