너비우선탐색

KoEunseo·2022년 9월 8일
0

Daily_Coding

목록 보기
9/21
que.push(this.root)
que = [
{"children": [
	{"children": [], "value": 2},
	{"children": [], "value": 3}
    ],
"value": 1}
]
// 1
//2 3

que.shift를 하면 배열 안에 있는 요소들이 다 나간다.

let bfs = function (node) {
  let data = [];
  let que = [];
  que.push(node);
  while(que.length){
    cur = que.shift();
    data.push(cur.value);
    que.map(el => data.concat(que.push(el.children)))
  }
  return data;
};

첫번째 노드에 담긴 값만 나옴

let bfs = function (node) {
  let data = [];
  let que = [];
  que.push(node);
  while(que.length){
    node = que.shift();
    data.push(node.value);
    if(node.children) que.push(node.children);
  }
  return data;
};

첫번째 노드에 담긴 값 + undefind 나옴...
보니까 que.shift()할때 값이 다 나감..;;
어떻게 방법이 없을까... 뭐가 잘못된걸까ㅠㅠ
강의들은대로 한거같은데.
강의를 한번 더 들어봐야겠다...

que[0].value = 1
que[0].children[0].value = 2
que[0].children[1].value = 3

que.map(el => el.children) //[Array(2)]

let bfs = function (node) {
  let data = [];
  let que = [node];
  while(que.length){
    const head = que[0]
    que = que.slice(1);
    data.push(head.value);
    head.children.map(children => que.push(children))
  }
  return data;
};
  1. shift를 slice로 바꾸었다. shift는 원본을 바꾸기 때문인지 기능은 똑같은 것 같은데 pass가 안됨...!!

    지금 que[0]이 전체 내용의 전부이고 que[1]이 없기 때문에 slice(1)을 하면 처음에 빈 배열이 나오고 shift()를 하면 node 전체가 리턴되는구나
  2. head에 que[0]을 할당해서 사용했는데 이렇게 따로 뽑아서 안쓰고 que[0].value하면 pass가 안됨
    slice해서 que가 빈 배열이 오기 때문인듯!!
    que 재할당한 부분 위에 있는 head에는 node 정보가 고대로 있으니.
let bfs = function (node) {
  let data = [];
  let que = [node];
  while(que.length){
    const head = que[0]
    data.push(que[0].value);
    que = que.slice(1);
    head.children.map(children => que.push(children))
  }
  return data;let bfs = function (node) {
  let data = [];
  let que = [node];
  while(que.length){
    // const head = que[0]
    data.push(que[0].value);
    que = que.slice(1);
    // data.push(head.value);
    node[0].children.map(el => que.push(el))
    // head.children.map(children => que.push(children))
  }
  return data;
};
};

이렇게 que[0]을 할당하지 않고 사용해보려고 data에 push하는 부분을 que재할당 부분 위에 넣어봤다. pass된다.. 근데 head를 쓴 이유가 있었으니
que에 재할당을 하면서 node를 줄여나가는데 맨 마지막줄에
head.children.map 부분에서 각각 que 재할당 부분과 node 전체 정보가 둘다 필요하기 때문...!! 마지막 head부분도 que[0]으로 바꾸면 children을 읽지 못한다. 왜냐면 que는 이미 재할당돼서 현재 빈배열이거든...
흠 node 원본을 이용해서 map을 해보려고 했으나 왜인지 안됐다.
콘솔에는 되는거같은디 뭐가 문제일까.

let bfs = function (node) {
  let data = [];
  let que = [node];
  while(que.length){
    data.push(que[0].value);
    que = que.slice(1);
    node[0].children.map(el => que.push(el))
  }
  return data;
};
profile
주니어 플러터 개발자의 고군분투기

0개의 댓글