>  기사  >  백엔드 개발  >  포인터 조작 및 재귀에 크게 의존하지 않고 어떻게 경로 문자열 목록을 계층적 트리 구조로 효율적으로 변환할 수 있습니까?

포인터 조작 및 재귀에 크게 의존하지 않고 어떻게 경로 문자열 목록을 계층적 트리 구조로 효율적으로 변환할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-27 05:06:02282검색

How can you efficiently transform a list of path strings into a hierarchical tree structure without relying heavily on pointer manipulation and recursion?

경로 문자열을 계층적 트리 구조로 변환

경로와 유사한 구조의 배열이 제시될 때 해당 계층적 트리 구조를 구성하는 것은 다음과 같습니다. 특히 포인터 조작 및 재귀의 제한으로 인해 어려운 작업입니다. 이를 해결하기 위한 효율적인 해결책은 기존 노드를 검색하면서 트리에 노드를 반복적으로 추가하는 방법을 활용하는 것입니다.

SOLUTION

제안된 솔루션은 재귀적 노드를 사용합니다. 노드 목록(루트)과 추가할 경로 구성 요소 목록(이름)을 가져오는 AddToTree라는 함수입니다. 루트 노드를 반복하여 이름의 첫 번째 구성 요소(names[0])가 이미 하위 항목으로 존재하는지 확인합니다. 그렇지 않은 경우 이름이 names[0]인 새 노드가 루트에 추가됩니다.

다음으로 함수는 names[0]과 일치하는 노드의 하위 항목에서 AddToTree를 재귀적으로 호출합니다. 이 프로세스는 이름의 모든 구성 요소가 처리되어 완전히 구성된 트리 구조가 될 때까지 계속됩니다.

코드 예

다음은 AddToTree 함수의 Go 구현입니다.

<code class="go">func AddToTree(root []Node, names []string) []Node {
    if len(names) > 0 {
        var i int
        for i = 0; i < len(root); i++ {
            if root[i].Name == names[0] { //already in tree
                break
            }
        }
        if i == len(root) {
            root = append(root, Node{Name: names[0]})
        }
        root[i].Children = AddToTree(root[i].Children, names[1:])
    }
    return root
}</code>

출력 예시

이 솔루션을 사용하면 제공된 입력 데이터를 원하는 트리 구조로 변환할 수 있습니다.

[{
    "name": "a",
    "children": [{
        "name": "b",
        "children": [{
            "name": "c"
        }, {
            "name": "g"
        }]
    }, {
        "name": "d"
    }]
}]

주요 차이점

제공된 코드와 비교하여 제안된 솔루션은 다음과 같은 몇 가지 주요 이점을 제공합니다.

  • 노드 목록에서 작동하므로 여러 루트 노드를 허용합니다.
  • 입력 노드를 수정하는 대신 새로운 노드를 생성하여 데이터 중복을 방지합니다.
  • 트리를 적극적으로 검색하여 중복 노드를 방지합니다.

위 내용은 포인터 조작 및 재귀에 크게 의존하지 않고 어떻게 경로 문자열 목록을 계층적 트리 구조로 효율적으로 변환할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.