问题描述
第一个数字是孩子的数量,第二个数字是它的“级别”,从 1 开始。
我希望程序输出一个与 matr 具有相同元素但按预序排列的列表。
对于输入: 列表(c(4,1),c(0,2),c(2,c(1,3),3))
输出应该是: 列表(c(4,3))
我认为问题出在全局变量上?我已经在 Python 中运行了它,但在 R 中没有运行,据我所知,它们正在做同样的事情。
这就是我所拥有的:
matr = list(c(4,3))
tot = 3
new = list()
func <- function(new,matr,level,tot){
if (level <= tot){
for (i in 1:length(matr)){
if (matr[[i]][2] == level){
a = matr[[i]]
matr = matr[-i]
new = c(new,list(a))
break
}
}
if (a[1]!=0){
for (i in 1:a[1]){
func(new,level+1,tot)
}
}
}
}
func(new,1,tot)
作为参考,以下代码执行我想要的操作(但它使用的是 Python 而不是 R)
matr = [[4,1],[0,2],[2,[1,3],3]]
tot=3
newm = []
def func(newm,level):
if level <= tot:
a = [k for k in matr if k[1] == level][0]
newm.append(a)
matr.remove(a)
for i in range(a[0]):
func(newm,level+1)
func(newm,1)
print(newm)
解决方法
没关系——解决了
if (level<=tot){
for(i in 1:length(matr)){
if (matr[[i]][2]==level){
a = matr[[i]]
assign("matr",matr[-i],envir=.GlobalEnv)
break
}
}
assign("newm",c(newm,list(a)),envir = .GlobalEnv)
if (a[1]!=0){
for (i in 1:a[1]){
topreorder(level+1)
}
}
}