algorithm - 从父子结构算法创建完整的层次结构字符串,递归

标签 algorithm recursion

我正在解决以下任务。有一个给定的元素层次结构。我有最低的元素(基础),我需要创建完整的层次结构字符串。我有一个函数,它返回一个元素的父元素。这意味着我可以要求 parent ,然后是 parent 的 parent ,等等。
示例:B 是 A 的父级,[C1, C2] 是 B 的父级,...
Example
在此示例中,结果应该是 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
A newline已添加到 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”)

关于algorithm - 从父子结构算法创建完整的层次结构字符串,递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67087127/

相关文章:

php - 如何在 php 或 mysql 中查找递归日期?

python-3.x - (算法)在Python中找到通过一组所需节点(可能使用BFS)并返回原点的最短路径

recursion - 通过 WaitGroup 编排递归快速排序调用

algorithm - 我应该使用哪种公钥算法来加密一小部分字节?

python - 求两个数之和的最有效方法

javascript - 扫雷的 JQuery 网格递归(单击相邻图 block )

Javascript 递归添加到正确的位置

c - 不返回字符串。这个程序将 123 这样的数字转换为 "One Two Three"这样的单词,为什么最后我什么也没有得到?

利用下载速度提高上传速度的算法

algorithm - 通过反转时域信号的极性,我可以取消源音频吗?