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

Luk*_*mšů 5 algorithm recursion

我正在解决以下任务。有一个给定的元素层次结构。我有最低的元素(基础),我需要创建完整的层次结构字符串。我有一个函数,它返回一个元素的父元素。这意味着我可以要求父母,然后是父母的父母,等等。

示例: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
Run Code Online (Sandbox Code Playgroud)

它为我的示例提供了以下结果:

A,B,C1,D1,E1 
C2,D2,E2  
E3
Run Code Online (Sandbox Code Playgroud)

如何达到预期的结果?:

A,B,C1,D1,E1
A,B,C2,D2,E2
A,B,C2,D2,E3
Run Code Online (Sandbox Code Playgroud)

小智 1

line我们必须在传入的路上构建电流,并将返回的行连接在一起作为result递归的输出。这是一个伪代码:

\n
Function getAllParents (line, Element)\n    result = \xe2\x80\x9c\xe2\x80\x9d\n    ParentCount = getParentCount(Element)\n    IF (ParentCount > 0) THEN\n        FOR i = 0 to ParentCount\n            ParentName = getParentName(Element, i)\n            result_i = getAllParents(copy(line)+\xe2\x80\x9d,\xe2\x80\x9d+ParentName, ParentName)\n            result = result + result_i\n        NEXT\n    ELSE\n        result = copy(line)+&newLine\n    END IF\n    \n    RETURN result\n\nEND Function\n
Run Code Online (Sandbox Code Playgroud)\n

每次到达终端节点时newline都会添加A ,就像在表中一样。line

\n

我们称其为getAllParents( \xe2\x80\x9cA\xe2\x80\x9d, \xe2\x80\x9cA\xe2\x80\x9d).

\n

为了更好地理解它是如何工作的,以下是示例的函数调用流程:

\n
(\xe2\x80\x9cA\xe2\x80\x9d, \xe2\x80\x9cA\xe2\x80\x9d)\n- (\xe2\x80\x9cA,B\xe2\x80\x9d, \xe2\x80\x9cB\xe2\x80\x9d)\n- - (\xe2\x80\x9cA,B,C1\xe2\x80\x9d, \xe2\x80\x9cC1\xe2\x80\x9d)\n- - - (\xe2\x80\x9cA,B,C1,D1\xe2\x80\x9d, \xe2\x80\x9cD1\xe2\x80\x9d)\n- - - - (\xe2\x80\x9cA,B,C1,D1,E1\xe2\x80\x9d, \xe2\x80\x9cE1\xe2\x80\x9d)\n- - (\xe2\x80\x9cA,B,C2\xe2\x80\x9d, \xe2\x80\x9cC2\xe2\x80\x9d)\n- - - (\xe2\x80\x9cA,B,C2,D2\xe2\x80\x9d, \xe2\x80\x9cD2\xe2\x80\x9d)\n- - - - (\xe2\x80\x9cA,B,C2,D2,E2\xe2\x80\x9d, \xe2\x80\x9cE2\xe2\x80\x9d)\n- - - - (\xe2\x80\x9cA,B,C2,D2,E3\xe2\x80\x9d, \xe2\x80\x9cE3\xe2\x80\x9d)\n
Run Code Online (Sandbox Code Playgroud)\n