我正在构建一个树遍历程序,它允许用户运行 BFS 和 DFS 遍历,以及添加和删除节点。
由于扩展邻接矩阵的问题,我坚持添加节点。对于这个例子,我想添加一个新的子节点 X
到父节点 H
:
目前,我已经对节点 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/