在R中将树结构实现为列表

时间:2018-02-28 10:37:06

标签: r tree binary-tree

我试图将这个简单的树结构实现为R:

中的列表
  1
 / \
2  3
  / \
 4  5

我试过的是:

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

> tree
[[1]]
[1] 1

[[2]]
[[2]][[1]]
[1] 2

[[2]][[2]]
[1] 3

[[2]][[3]]
[[2]][[3]][[1]]
[1] 4

[[2]][[3]][[2]]
[1] 5

这是对的吗?根据我的理解,这棵树看起来像这样:

   1
 / \ \
2  3  .
     / \
     4  5

更新

我也试过这个:

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

但它看起来也错了

2 个答案:

答案 0 :(得分:1)

树只需要节点名称。

tree <- list(data=1, 
             lchild=list(data=2), 
             rchild=list(data=3, 
                         lchild=list(data=4), 
                         rchild=list(data=5)))

答案 1 :(得分:1)

考虑db.category.aggregate([ {"$lookup": { "from": "app", "localField": "_id", "foreignField": "_id", "as": "R" }}, {"$unwind": "$R"}, {"$project": { "midEq": {"$eq": ["$M_id", "$R.app_id"]}, "app_id": 1, "app_name": 1 }}, {"$match": { "$and": [ {"category_id": {"$eq": 6}}, {"midEq": {"$eq": True}} ]}}, {"$project": { "midEq": 0 }} ]) 包。它可以很好地打印嵌套列表的结构:

data.tree

返回:

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

data.tree::FromListSimple(tree, nodeName = "1")