자 바스 크 립 트 구조 트 리 구조의 효율 적 인 알고리즘
우 리 는 조직 등급,성 시 현 또는 동 식물 분류 등 나무 데이터 구 조 를 자주 만난다.다음은 트 리 구조의 예 입 니 다.
실제 응용 에서 흔히 볼 수 있 는 방법 은 이런 정 보 를 아래 의 구조 로 저장 하 는 것 이다.특히 1 쌍 이 넘 는 부모/자식 노드 관계 가 존재 할 때:
const data = [
{ id: 56, parentId: 62 },
{ id: 81, parentId: 80 },
{ id: 74, parentId: null },
{ id: 76, parentId: 80 },
{ id: 63, parentId: 62 },
{ id: 80, parentId: 86 },
{ id: 87, parentId: 86 },
{ id: 62, parentId: 74 },
{ id: 86, parentId: 74 },
];
그렇다면 어떻게 이런 대상 배열 형식 을 등급 트 리 형식 으로 바 꿉 니까?사실 자 바스 크 립 트 대상 이 인용 하 는 특성 을 이용 하여 실현 하 는 것 은 매우 간단 할 것 이다.그것 은 귀환 하지 않 고 O(n)시간 내 에 완성 할 수 있다.술어
서술 의 편 의 를 위해 서 우 리 는 먼저 몇 개의 용 어 를 정의 한다.우 리 는 배열 의 모든 요 소 를'노드'라 고 부른다.노드 는 여러 노드 의'부모 노드'일 수도 있 고 특정한 노드 의'하위 노드'일 수도 있다.위의 그림 에서 노드 86 은 노드 80 과 노드 87 의'부모 노드'이 고 노드 86 은 노드 74 의 서브 노드 이다.나무의 맨 윗부분 노드 를'뿌리 노드'라 고 부른다.
사고의 방향
나무 구 조 를 만 들 기 위해 서 는 다음 과 같은 것 이 필요 하 다.
데이터 배열
현재 원소 의 부모 원 소 를 찾 습 니 다
대상 트 리 에 저 장 된 인용 을 볼 수 있 습 니 다.이것 이 바로 우리 가 O(n)시간 안에 이 임 무 를 완성 할 수 있 는 이유 입 니 다!
ID-배열 색인 매 핑 관계 만 들 기
필요 한 것 은 아니 지만 이 맵 관 계 는 요소 의 위 치 를 신속하게 찾 아 부모 요소 의 인용 을 쉽게 찾 을 수 있 습 니 다.
const idMapping = data.reduce((acc, el, i) => {
acc[el.id] = i;
return acc;
}, {});
매 핑 결 과 는 다음 과 같 습 니 다.그 후에 당신 은 그것 의 용도 가 얼마나 큰 지 볼 수 있 습 니 다.{
56: 0,
62: 7,
63: 4,
74: 2,
76: 3,
80: 5,
81: 1,
86: 8,
87: 6,
};
구조
이제 우 리 는 이 나무 구 조 를 구축 하기 시작 했다.이 대상 배열 을 옮 겨 다 니 며 모든 요소 의 부모 요소 대상 을 찾 은 다음 이 요소 에 대한 인용 을 추가 합 니 다.이 idMapping 은 요소 의 위 치 를 정 하 는 데 얼마나 편리 한 지 보 실 수 있 습 니 다(상수 시간).
let root;
data.forEach(el => {
//
if (el.parentId === null) {
root = el;
return;
}
//
const parentEl = data[idMapping[el.parentId]];
// `children`
parentEl.children = [...(parentEl.children || []), el];
});
일 을 끝내다console.log 로 root 인쇄 하기:
console.log(root);
{id: 74,
parentId: null,
children: [
{
id: 62,
parentId: 74,
children: [{ id: 56, parentId: 62 }, { id: 63, parentId: 62 }],
},
{
id: 86,
parentId: 74,
children: [
{
id: 80,
parentId: 86,
children: [{ id: 81, parentId: 80 }, { id: 76, parentId: 80 }],
},
{ id: 87, parentId: 86 },
],
},
],
};
의 원리
왜 이렇게 할 수 있 지?이것 은 data 배열 의 모든 요 소 는 메모리 에 있 는 대상 참조 입 니 다.foreach 순환 에 있 는 el 변 수 는 메모리 에 있 는 대상 을 가리 키 고 parentEl 도 대상 을 참조 하기 때 문 입 니 다.
메모리 의 한 대상 이 children 배열 을 참조 하면 이 하위 요 소 는 자신의 하위 요소 배열 을 참조 할 수 있 습 니 다.이러한 관련 관 계 는 모두 인용 을 통 해 이 루어 집 니 다.
총결산
대상 인용 은 자 바스 크 립 트 에서 가장 기본 적 인 개념 중 하나 로 더 많은 학습 과 이해 가 필요 하 다.이 개념 을 진정 으로 이해 하면 까다 로 운 bug 를 피 할 수 있 을 뿐만 아니 라 복잡 해 보 이 는 문제 에 상대 적 으로 간단 한 해결 방안 을 제공 할 수 있다.
이상 은 자바 스 크 립 트 구조 트 리 구조의 효율 적 인 알고리즘 에 대한 상세 한 내용 입 니 다.자바 스 크 립 트 구조 트 리 구조 에 관 한 알고리즘 에 관 한 자 료 는 다른 관련 글 에 주목 하 시기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JS 판단 수조 네 가지 실현 방법 상세그러면 본고는 주로 몇 가지 판단 방식과 방식 판단의 원리를 바탕으로 문제가 있는지 토론하고자 한다. 예를 들어 html에 여러 개의 iframe 대상이 있으면 instanceof의 검증 결과가 기대에 부합되지 않을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.