Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 스프링
- GIT
- 개발
- 컴포넌트
- component
- DATABASE
- 개발공부
- springboot
- JS
- EXTJS
- table
- reactjs
- sql
- 자바스크립트
- mssql
- Intellij
- 리액트
- restapi
- javascript
- Spring
- 보안취약점
- java
- 데이터베이스
- jdk
- 쿼리
- Vue
- 자바
- crud
- React
- 스프링부트
Archives
- Today
- Total
준준의 기록일지
DFS 재귀함수 (liquor tree) 본문
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
vue liquor tree를 재귀함수로 호출하여 AD OU정보를 depth별로 동적으로 api로 가져오는 코드이다.
기존 코드로 작성할 경우 child를 추가할때 경로를 못찾는 문제가 있었다.
아마 다시 작성하면 문제를 해결할 수 있었겠지만, 새로운 아이디어를 생각해보기로 결정했다.
굳이, depth의 모든 item을 순회할 필요가 있었는가?
item의 children이 있을때 재귀로 탐색하고, 동일한 id값이 있으면 return 없으면, 깊이 우선 탐색으로 진행하면 될 것으로 보였고, 결과는 성공이다.
기존 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
putTreeItem(items, targetNode, children) {
// 타켓노드의 아이디와 일치하는 노드를 찾아서 노드 추가
for (let n = 0; n < items.length; n++) {
if (items[n]['distinguishedName'] === targetNode.id) {
// items[n].children = children
// this.addText(storeTree, items)
// storeTree.commit('setRows', storeTree.state.rows)
debugger
this.addChildText(n, 0, items, children)
storeTree.commit('setRows', storeTree.state.rows)
// storeTree.commit('setRows', storeTree.state.rows)
// storeTree.commit('appendChildren', {n, children})
return
} else {
//타겟노드 아이디와 일치하지 않을 경우 자식 노드 탐색
for(let i = 0; i < items[n].children.length; i++) {
if (items[n].children[i]['distinguishedName'] === targetNode.id) {
// items[n].children[i].children = children
// this.addText(storeTree, items)
// storeTree.commit('setRows', storeTree.state.rows)
this.addChildText(n, i, items, children)
storeTree.commit('setRows', storeTree.state.rows)
// storeTree.commit('appendChildren', {n, i, children})
return
}
else {
//자식노드에도 없다면, 자식노드를 루트노드로 설정 -> 재귀 호출
debugger
this.putTreeItem(items[n].children[i].children, targetNode, children)
}
}
}
}
},
|
cs |
개선 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
putTreeItem(items, targetNode, children) {
for (const object of Object.entries(items)) {
if(object[1].distinguishedName !== targetNode.id) {
if(Object.keys(object[1].children).length !== 0) {
this.test(object[1].children, targetNode, children)
}
} else {
this.testAdd(object[1], children)
storeTree.commit('setRows', storeTree.state.rows)
return
}
console.log(`${object[0]} : ${object[1].distinguishedName}`);
}
},
|
cs |
'알고리즘' 카테고리의 다른 글
[기본 알고리즘 정리] 배열, 큐 (0) | 2021.09.06 |
---|---|
[알고리즘]최소공배수와 최대공약수, 유클리드 호제 (0) | 2020.07.29 |
[알고리즘] 백준 9631번 문제 GCD 합 (0) | 2020.07.29 |