computer-science - 给定一个类似“树”的数据结构,打印出从叶子到根的所有路径
问题描述
有人可以指导我正确的方向吗,我不明白如何将结果从叶子返回到根
tree = {
"name": "root",
"children": [
{
"name": "child1",
"children": [
{
"name": "grand_child1",
"children": []
},
{
"name": "grand_child2",
"children": []
}
]
},
{
"name": "child2",
"children": []
}
]
}
编辑:解决方案应该是一种算法,因为如果树深度增加它应该仍然有效
解决方案
您可以使用递归,例如:
def traverse(node, *names, &block)
names.unshift(node[:name])
yield *names and return if node[:children].empty?
node[:children].each { |child| traverse(child, *names, &block) }
end
该方法在单个节点上运行。在每次调用时,它将节点的名称添加到聚集列表names
(最初为空)。然后它为每个孩子再次调用自己,通过names
. 如果一个节点没有任何子节点,它将屈服于names
给定的块。(这也被传递)
用法:
traverse(tree) do |*names|
p name: names
end
输出:
{:name=>["grand_child1", "child1", "root"]}
{:name=>["grand_child2", "child1", "root"]}
{:name=>["child2", "root"]}
推荐阅读
- python - 将过滤器字典匹配到另一个 - Python
- angular - 错误类型错误:“_co.bankId 未定义”(Angular 7)
- java - 带有 Kafka 源和 Dataflow 运行器的 Beam java SDK 2.10.0:窗口化的 Count.perElement 永远不会触发数据
- python - 如何通过聚合循环运行数据框列表?
- java - 使用模拟服务进行 H2 数据库测试会产生空指针异常
- sql - 使用多个布尔运算符的 SQL 搜索
- javascript - 如何解析在javascript中嵌套了转义JSON的JSON?
- c# - 无法将 C# 类型正确代理到 F# WebSharper 应用程序中的客户端代码
- ruby - ocra 未初始化常量 CommonElement (NameError)
- python - Pandas 枢轴列顺序多个 agg