>백엔드 개발 >Golang >경로 문자열 배열을 트리형 구조로 어떻게 변환할 수 있나요?

경로 문자열 배열을 트리형 구조로 어떻게 변환할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-10-27 04:42:29430검색

How can I convert a path string array into a tree-like structure?

경로 문자열 배열을 트리형 구조로 변환

소개:

다음에서 트리형 구조 구성 경로 문자열 배열은 어려울 수 있지만 적절한 기술을 사용하면 효율적으로 달성할 수 있습니다.

해결책:

제공되는 솔루션은 재귀 함수인 AddToTree를 사용합니다. , 트리의 현재 상태를 나타내는 노드 목록과 추가할 나머지 경로 세그먼트를 입력으로 사용합니다. 알고리즘은 다음과 같이 진행됩니다.

  1. 현재 경로 세그먼트(경로의 첫 번째 요소)가 이미 현재 루트의 하위 노드로 존재하는지 확인합니다.
  2. 찾지 못할 경우 생성 현재 경로 세그먼트를 이름으로 사용하여 새 노드를 만들고 이를 현재 루트의 하위로 추가합니다.
  3. 새로 생성된 하위 노드를 새 루트로 사용하여 나머지 경로 세그먼트에서 AddToTree를 재귀적으로 호출합니다.

코드 조각:

<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으로 문의하세요.