algorithm - 从父子结构算法创建完整的层次结构字符串,递归
问题描述
我正在解决以下任务。有给定的元素层次结构。我有最低的元素(基础),我需要创建完整的层次结构字符串。我有一个函数,它返回一个元素的父级。这意味着我可以要求父母,然后是父母的父母,等等。
示例:B 是 A 的父母,[C1, C2] 是 B 的父母,...
在这个例子中,结果应该是由 3 个字符串组成的数组(第 1、2、3 行),每个字符串都包含基本元素 A 的完整层次结构。
这是我的伪代码函数:
Function getAllParents (Element)
ParentCount = getParentCount(Element)
result = Element
IF (ParentCount > 0) THEN
FOR i = 0 to ParentCount
ParentName = getParentName(Element, i)
result = result + "," + getAllParents(parent)
NEXT
END IF
IF (ParentCount = 0) then
result = result + &newLine
END IF
RETURN result
END Function
它为我的示例提供了以下结果:
A,B,C1,D1,E1
C2,D2,E2
E3
如何达到预期的效果?:
A,B,C1,D1,E1
A,B,C2,D2,E2
A,B,C2,D2,E3
解决方案
我们必须在入路中构建当前line
,并将返回的行连接在一起作为result
递归中的出路。这是一个伪代码:
Function getAllParents (line, Element)
result = “”
ParentCount = getParentCount(Element)
IF (ParentCount > 0) THEN
FOR i = 0 to ParentCount
ParentName = getParentName(Element, i)
result_i = getAllParents(copy(line)+”,”+ParentName, ParentName)
result = result + result_i
NEXT
ELSE
result = copy(line)+&newLine
END IF
RETURN result
END Function
每次到达终端节点时newline
都会添加A ,就像在您的表中一样。line
我们称之为getAllParents( “A”, “A”)
.
为了更好地理解它的工作原理,以下是您的示例的函数调用流程:
(“A”, “A”)
- (“A,B”, “B”)
- - (“A,B,C1”, “C1”)
- - - (“A,B,C1,D1”, “D1”)
- - - - (“A,B,C1,D1,E1”, “E1”)
- - (“A,B,C2”, “C2”)
- - - (“A,B,C2,D2”, “D2”)
- - - - (“A,B,C2,D2,E2”, “E2”)
- - - - (“A,B,C2,D2,E3”, “E3”)
推荐阅读
- javascript - NodeJS:从循环中的多个TSV文件异步返回数据
- html - 如何将文本移动到页面的顶部和中心?
- python - 在精确文本匹配时重新索引数据框
- spring-boot - Spring Boot 中是否在 Rest API 的方法参数级别进行验证?
- javascript - 如何使用 wordpress react API 在 react 中显示插件内容
- c++ - 使用“wininet”和“windows.h”时如何解决“IServiceProvider”不明确?
- sql - 如何根据两列的内容拆分一组数据的结果?
- html - 浏览器未呈现 CSS 字体大小
- python - python - 如何用熊猫更新而不是重写csv?
- php - 如何在 Prestashop 1.7 中进行分页?