java - 树遍历 - 在运行后将节点附加到邻接矩阵

标签 java algorithm swing breadth-first-search

我正在构建一个树遍历程序,它允许用户运行 BFS 和 DFS 遍历,以及添加和删除节点。

由于扩展邻接矩阵的问题,我坚持添加节点。对于这个例子,我想添加一个新的子节点 X 到父节点 H:

enter image description here

目前,我已经对节点 X 进行了硬编码,但稍后将允许自定义输入。

用户点击添加节点按钮:

    //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)

最佳答案

 adjMatrixCopy[newSize][col] = 1;

这是错误的。也许你想要

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

代替?

关于java - 树遍历 - 在运行后将节点附加到邻接矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17240945/

相关文章:

java - 理解 Donald B. Johnson 算法中的伪代码

algorithm - 算法中的符号数学

java - 理解java中的内存使用概念

java - Spring MVC : @Value annotation with final variable

algorithm - 迄今为止的事件优化分布

java - JCheckBox 没有得到更新

java - 有什么方法可以获取paintComponent中的参数吗?

java - 通过 log4j 将 printStackTrace() 发送到文件而不捕获异常

java - 使用 java 解析 xml 文件——基于 android 的应用程序

java - Swing 字体渲染