树V的示例表示:
V = [3, [
[1, []] ,
[0, [
[2, []] ,
[5, []]]],
[4, []]]]
3是树的根节点,嵌套列表中的每个元素表示节点的子节点。因此V是一棵树,其中3作为根节点,1,0和4作为3的子节点,2和5作为0的子节点。 到目前为止,这是我的代码:
def tree_to_matrix_helper(tree, size, matrix):
for i in range(0, len(tree[1])) :
matrix[tree[0]][tree[1][i][0]] = 1
matrix[tree[1][i][0]][tree[0]] = 1
if len(tree[1][i][1]) > 0:
tree_to_matrix_helper(tree[1][i], size-len(tree[1])-1, matrix)
return matrix
def tree_to_matrix(tree, size) :
matrix_row = []
matrix = []
for i in range(0, size):
matrix_row.append(0)
for i in range(0, size):
matrix.append(matrix_row)
return tree_to_matrix_helper(tree, size, matrix)
真正奇怪的是,当我使用for循环初始化矩阵时,当我运行tree_to_matrix(V,6)时,我得到一个只有1的6x6邻接矩阵,这显然是错误的。但是当我简单地通过说
来初始化矩阵时 matrix = [[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]]
(与for循环初始化的矩阵相同) 然后运行tree_to_matrix(V,6),我得到适当的相应邻接矩阵。这当然适用于任何大小为6的树,但我必须为任何大小的树抽象。问题是我能想到初始化邻接矩阵的唯一方法就是我在main函数中做到了这一点,但是矩阵中的每一行似乎总是相同。那么我该如何进行这种抽象呢?