如何解决在 R 中,如何将层序树转换为预序树?
第一个数字是孩子的数量,第二个数字是它的“级别”,从 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)
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。