访问实现为嵌套列表的树的级别

问题描述 投票:1回答:1

我将此树实现为嵌套列表:

 1
/ \
2  3
  / \
 4   5

> tree <- list(1, list(2), list(3, list(4), list(5)))

> data.tree::FromListSimple(tree, nodeName = "1")
  levelName
1 1        
2  ¦--1    
3  °--2    
4      ¦--1
5      °--2

如何在这个示例中提取树的级别

第1级:[1]第2级:[2,3]第3级:[4,5]

tree[[1]]是第一级,这很容易。但tree[[2]]只是2

所以第二级将是c(tree[[2]], tree[[3]][1])

如何将此概括为任何表示为嵌套列表的树结构?

r tree binary-tree
1个回答
1
投票

使用普通的base R,您可以使用递归函数执行此操作(只要您的tree不是太大)。例如:

getElems <- function(tree, depth, level) {
  if (depth == level) {
    if (is.list(tree)) 
      tree[[1]]
  } else {
    sapply(tree, getElems, depth = depth + 1, level = level)
  }
}

# first level
unlist(getElems(tree, 1, 1))
# second level (always starting the search from depth = 1)
unlist(getElems(tree, 1, 2))
# third level
unlist(getElems(tree, 1, 3))
© www.soinside.com 2019 - 2024. All rights reserved.