해지말라고
482
2020-11-30 14:13:28 작성 2020-11-30 14:16:00 수정됨
0
156

Javascript 트리 알고리즘


안녕하세요 제가 지금 트리 문제를 풀고있는데 감이 안잡혀서 질문을 드리려고 글을 쓰게 되었습니다.

지금 작성되어 있는 코드는 루트가 하나이며 모든 루트들이 parentId로 연결되어 있을 때 동작하여 트리 구조를 만드는 코드입니다.


근데 문제는 저는 루트가 여러개이며 이 루트를 분리시키면(코드가 현재 rootId를 하나씩 받고있음)이 코드에서 하위 노드들이 찾을 수 없는 parentId를 계속 찾으려 while문을 돌며 멈추질 않습니다. 제가 생각한 방법으로는 rootId를 배열로 받아 안쪽 함수에서 해결을 봐야 할 것 같은데 어떤식으로 해야 할 지 방법이 떠오르지 않아 도움을 요청합니다. 여러분 생각은 어떤지 알고싶습니다.

// 루트가 부모가 없음으로 판단 가능

const arrayList = [{id:'53535', parentId: '1234'},
 {id:'535352234', parentId: '1234'},
  {id:'53535444', parentId: '1234'},
   {id:'3', parentId: '53535444'},
    {id:'3434', parentId: '3'},

  ]

const treeModel = function (arrayList, rootId) {
	const rootNodes = [];
	const traverse = function (nodes, item, index) {
		if (nodes instanceof Array) {
			return nodes.some(function (node) {
				if (node.id === item.parentId) {
					node.children = node.children || [];
					return node.children.push(arrayList.splice(index, 1)[0]);
				}
				return traverse(node.children, item, index);
			});
		}
	};

	while (arrayList.length > 0) {
		arrayList.some(function (item, index) {
			if (item.parentId === rootId) {
				return rootNodes.push(arrayList.splice(index, 1)[0]);
			}

			return traverse(rootNodes, item, index);
		});
	}
	return rootNodes;
};
const d = treeModel(arrayList, '1234');
console.log(JSON.stringify(d));

결과값 : [{"id":"53535","parentId":"1234"},{"id":"535352234","parentId":"1234"},{"id":"53535444","parentId":"1234","children":[{"id":"3","parentId":"53535444","children":[{"id":"3434","parentId":"3"}]}]}]


0
  • 답변 0

  • 로그인을 하시면 답변 을 등록할 수 있습니다.