DevLog

TIL(20210722) - ์ž๋ฃŒ๊ตฌ์กฐ(Stack, Queue, Tree, Graph) ๋ณธ๋ฌธ

๐Ÿค” TIL(Today I Learned)

TIL(20210722) - ์ž๋ฃŒ๊ตฌ์กฐ(Stack, Queue, Tree, Graph)

Seungjae Lee 2021. 7. 22. 13:50

๐ŸŽ Today

- Stack, Queue, Tree, Graph ์ž๋ฃŒ๊ตฌ์กฐ ์ดํ•ด์™€ ๊ฐ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๊ฐœ๋…๊ณผ ๊ตฌ์กฐ ํŒŒ์•…

- ์ƒํ™ฉ์— ๋งž๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด

๐Ÿค” Learned

์ž๋ฃŒ๊ตฌ์กฐ(Data Structures)๋ž€?

๋ฐ์ดํ„ฐ๋Š” ๋ถ„์„ํ•˜๊ณ  ์ •๋ฆฌํ•˜์—ฌ ํ™œ์šฉํ•ด์•ผ ์˜๋ฏธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ , ๋ฐ์ดํ„ฐ์˜ ํŠน์ง•์„ ์ž˜ ํŒŒ์•…(๋ถ„์„)ํ•˜์—ฌ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋“ค์„ ๋ชจ์€ ๊ฒƒ์ด ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

์ฆ‰, ์ž๋ฃŒ๊ตฌ์กฐ๋ž€? ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋“ค์˜ ๋ฌถ์Œ์„ ์ €์žฅํ•˜๊ณ , ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•œ ๊ฒƒ์ด๋‹ค.

๊ฐ ์ž๋ฃŒ๊ตฌ์กฐ๋“ค์˜ ํŠน์ง•์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์ƒํ™ฉ์— ๋งž๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค.


์Šคํƒ(Stack)

์Šคํƒ(Stack)์€ ์Œ“๋‹ค, ์Œ“์ด๋‹ค, ํฌ๊ฐœ์ง€๋‹ค ์™€ ๊ฐ™์€ ๋œป์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ณ , ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ(data)๋Š” ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ค๋Š”

LIFO(Last In First Out) ํ˜น์€ FILO(First In Last Out)์„ ํŠน์ง•์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์‹ค์‚ฌ์šฉ์˜ ์˜ˆ์ œ๋กœ๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๋’ค๋กœ ๊ฐ€๊ธฐ, ์•ž์œผ๋กœ ๊ฐ€๊ธฐ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.

// Stack ๊ตฌํ˜„์„ ์œ„ํ•œ ๊ธฐ๋ณธ ์ฝ”๋“œ

class Stack {
  //stack constructor๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  constructor() {
    this.storage = {};
    this.top = 0;
  }
  // stack์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  // this.top์€ ์Šคํƒ์ด ์Œ“์ผ ๋•Œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— top์œผ๋กœ size๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  // this.top์€ ์Šคํƒ์— ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋  ์š”์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. 0๋ถ€ํ„ฐ 1์”ฉ ์ฆ๊ฐํ•˜๋ฉฐ ํ‘œํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  size() {
    return this.top;
  }
  //stack์— element๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  //์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋  ์š”์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” this.top์„ ํ‚ค๋กœ, ์š”์†Œ๋ฅผ ๊ฐ’์œผ๋กœ ํ•˜์—ฌ storage์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.this.top์€ ๋‹ค์Œ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•˜์—ฌ ์ƒˆ๋กœ์šด ์š”์†Œ์— ๋Œ€๋น„ํ•ฉ๋‹ˆ๋‹ค.
  push(element) {
    this.storage[this.top] = element;
    this.top += 1;
  }
  // stack์—์„œ element๋ฅผ ์ œ๊ฑฐํ•œ ๋’ค ํ•ด๋‹น element๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  // ๋งŒ์•ฝ size๊ฐ€ 0์ด๋ผ๋ฉด ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  // top-1๋กœ ์ตœ์ƒ๋‹จ์„ ์„ค์ •ํ•œ ํ›„ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ณ , ์Šคํƒ์—์„œ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
  // ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ–ˆ์œผ๋‹ˆ top๋„ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค.
  pop() {
    if (this.size() <= 0) {
      return;
    }
    const result = this.storage[this.top - 1];
    delete this.storage[this.top - 1];
    this.top -= 1;
    return result;
  }
}

ํ(Queue)

ํ(Queue)๋Š” ์ค„์„ ์„œ์„œ ๊ธฐ๋‹ค๋ฆฌ๋‹ค, ๋Œ€๊ธฐ ํ–‰๋ ฌ์ด๋ผ๋Š” ๋œป์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

Queue๋Š” Stack๊ณผ ๋ฐ˜๋Œ€๋กœ,

๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ(data)๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๊ณ , ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๋Š” ๋‚˜์ค‘์— ๋‚˜์˜ค๋Š”

FIFO(First In First Out) ํ˜น์€ LILO(Last In Last Out)์„ ํŠน์ง•์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์‹ค์‚ฌ์šฉ์˜ ์˜ˆ์ œ๋กœ๋Š” ํ”„๋ฆฐํ„ฐ์˜ ์ธ์‡„ ๋Œ€๊ธฐ์—ด์ด ์žˆ๋‹ค.

// Queue ๊ตฌํ˜„์„ ์œ„ํ•œ ๊ธฐ๋ณธ ์ฝ”๋“œ

class Queue {
  //๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ์š”์†Œ๋ฅผ front,
  //๊ฐ€์žฅ ๋’ค์— ์žˆ๋Š” ์š”์†Œ๋ฅผ rear ๋ผ๊ณ  ํ–ˆ์„ ๋•Œ
  //queue constructor ์ƒ์„ฑ
  constructor() {
    this.storage = {};
    this.front = 0;
    this.rear = 0;
  }
  // queue์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  // queue๋Š” ์ถ”๊ฐ€๋  ๋•Œ, rear์˜ ๊ฐ’์ด ์ปค์ง€๊ณ  ์‚ญ์ œ ๋  ๋•Œ, front๊ฐ€ ๋ณ€๊ฒฝ์ด ๋•Œ๋ฌธ์—, ๊ฐ ๊ฐ’์„ ์•Œ์•„์•ผ size๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  size() {
    return this.rear - this.front;
  }
  // queue์— element๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  // ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋  ์š”์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” this.rear๋ฅผ ํ‚ค๋กœ, ์š”์†Œ๋ฅผ ๊ฐ’์œผ๋กœ ํ•˜์—ฌ storage์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. this.rear์€ ๋‹ค์Œ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•˜์—ฌ ์ƒˆ๋กœ์šด ์š”์†Œ์— ๋Œ€๋น„ํ•ฉ๋‹ˆ๋‹ค.
  enqueue(element) {
    this.storage[this.rear] = element;
    this.rear += 1;
  }
  // queue์—์„œ element๋ฅผ ์ œ๊ฑฐ ํ•œ ๋’ค ํ•ด๋‹น element๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  // ๋งŒ์•ฝ size๊ฐ€ 0์ด๋ผ๋ฉด ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  // this.front+1๋กœ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ๋‹ค์‹œ ์„ค์ •ํ•œ ํ›„ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ณ , ํ์—์„œ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
  dequeue() {
    if (this.size() === 0) {
      return;
    }
    const result = this.storage[this.front];
    delete this.storage[this.front];
    this.front += 1;
    return result;
  }
}

๊ทธ๋ž˜ํ”„(graph)

๊ทธ๋ž˜ํ”„๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ ๋“ค์ด ์„œ๋กœ ๋ณต์žกํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

์ง์ ‘์ ์ธ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋‘ ์  ์‚ฌ์ด๋ฅผ ์ด์–ด์ฃผ๋Š” ์„ ์ด ์žˆ๋‹ค.

๊ฐ„์ ‘์ ์ธ ๊ด€๊ณ„๋ผ๋ฉด ๋ช‡ ๊ฐœ์˜ ์ ๊ณผ ์„ ์— ๊ฑธ์ณ ์ด์–ด์ง„๋‹ค.

ํ•˜๋‚˜์˜ ์ ์„ ๊ทธ๋ž˜ํ”„์—์„œ๋Š” ์ •์ (vertex)์ด๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ณ ,

ํ•˜๋‚˜์˜ ์„ ์€ ๊ฐ„์„ (edge)์ด๋ผ๊ณ  ํ•œ๋‹ค.

์‹ค์‚ฌ์šฉ์˜ ์˜ˆ์‹œ๋กœ๋Š” ํฌํ„ธ ์‚ฌ์ดํŠธ์˜ ๊ฒ€์ƒ‰ ์—”์ง„, SNS์—์„œ ์‚ฌ๋žŒ๋“ค๊ณผ์˜ ๊ด€๊ณ„, ๋„ค๋น„๊ฒŒ์ด์…˜ (๊ธธ์ฐพ๊ธฐ) ๋“ฑ์ด ์žˆ๋‹ค.

  • ์ •์ : ์„œ์šธ, ๋Œ€์ „, ๋ถ€์‚ฐ
  • ๊ฐ„์„ : ์„œ์šธ—๋Œ€์ „, ๋Œ€์ „—๋ถ€์‚ฐ, ๋ถ€์‚ฐ—์„œ์šธ

๊ทธ๋ž˜ํ”„ ์šฉ์–ด

  • ๋ฌด(๋ฐฉ)ํ–ฅ๊ทธ๋ž˜ํ”„(undirected graph): ๋‚ด๋น„๊ฒŒ์ด์…˜์€ ๋ฌด(๋ฐฉ)ํ–ฅ ๊ทธ๋ž˜ํ”„์ด๋‹ค. ์„œ์šธ์—์„œ ๋ถ€์‚ฐ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋“ฏ, ๋ฐ˜๋Œ€๋กœ ๋ถ€์‚ฐ์—์„œ ์„œ์šธ๋กœ ๊ฐ€๋Š”๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋‹จ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(directed) : ๋‘ ์ง€์ ์ด ์ผ๋ฐฉํ†ตํ–‰ ๋„๋กœ๋กœ ์ด์–ด์ ธ ์žˆ๋‹ค๋ฉด ๋‹จ๋ฐฉํ–ฅ์ธ ๊ฐ„์„ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ง„์ž…์ฐจ์ˆ˜(in-degree) / ์ง„์ถœ์ฐจ์ˆ˜(out-degree): ํ•œ ์ •์ ์— ์ง„์ž…(๋“ค์–ด์˜ค๋Š” ๊ฐ„์„ )ํ•˜๊ณ  ์ง„์ถœ(๋‚˜๊ฐ€๋Š” ๊ฐ„์„ )ํ•˜๋Š” ๊ฐ„์„ ์ด ๋ช‡ ๊ฐœ์ธ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ์ธ์ ‘(adjacency): ๋‘ ์ •์ ๊ฐ„์— ๊ฐ„์„ ์ด ์ง์ ‘ ์ด์–ด์ ธ ์žˆ๋‹ค๋ฉด ์ด ๋‘ ์ •์ ์€ ์ธ์ ‘ํ•œ ์ •์ ์ด๋‹ค.
  • ์ž๊ธฐ ๋ฃจํ”„(self loop): ์ •์ ์—์„œ ์ง„์ถœํ•˜๋Š” ๊ฐ„์„ ์ด ๊ณง๋ฐ”๋กœ ์ž๊ธฐ ์ž์‹ ์—๊ฒŒ ์ง„์ž…ํ•˜๋Š” ๊ฒฝ์šฐ ์ž๊ธฐ ๋ฃจํ”„๋ฅผ ๊ฐ€์กŒ๋‹ค ๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค. ๋‹ค๋ฅธ ์ •์ ์„ ๊ฑฐ์น˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค.
  • ์‚ฌ์ดํด(cycle): ํ•œ ์ •์ ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ๋‹ค์‹œ ํ•ด๋‹น ์ •์ ์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์‚ฌ์ดํด์ด ์žˆ๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค. ๋‚ด๋น„๊ฒŒ์ด์…˜ ๊ทธ๋ž˜ํ”„๋Š” ์„œ์šธ —> ๋Œ€์ „ —> ๋ถ€์‚ฐ —> ์„œ์šธ ๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ์‚ฌ์ดํด์ด ์กด์žฌํ•˜๋Š” ๊ทธ๋ž˜ํ”„์ด๋‹ค.

ํŠธ๋ฆฌ(Tree)

์ž๋ฃŒ๊ตฌ์กฐ Tree๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๋‚˜๋ฌด์˜ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ๋Š” ๋‚˜๋ฌด๋ฅผ ๊ฑฐ๊พธ๋กœ ๋’ค์ง‘์–ด ๋†“์€ ๋“ฏํ•œ ๋ชจ์Šต์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”„์˜ ์—ฌ๋Ÿฌ ๊ตฌ์กฐ ์ค‘ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์˜ ํ•œ ๊ตฌ์กฐ๋กœ, ํ•˜๋‚˜์˜ ๋ฟŒ๋ฆฌ๋กœ๋ถ€ํ„ฐ ๊ฐ€์ง€๊ฐ€ ์‚ฌ๋ฐฉ์œผ๋กœ ๋ป—์€ ํ˜•ํƒœ๊ฐ€ ๋‚˜๋ฌด์™€ ๋‹ฎ์•„ ์žˆ๋‹ค๊ณ  ํ•ด์„œ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

์ž๋ฃŒ๊ตฌ์กฐ Tree๋Š” ๊นŠ์ด์™€ ๋†’์ด, ๋ ˆ๋ฒจ ๋“ฑ์„ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์น˜ ๊ฐ€๊ณ„๋„์™€ ํก์‚ฌํ•ด ๋ณด์ด๋Š” ์ด ํŠธ๋ฆฌ ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋กœ ์•„๋ž˜์— ์žˆ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ์— ๋ฌด๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ณ„์ธต์  ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋‚˜์—ด์‹œํ‚จ ์„ ํ˜• ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ, ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ๋’ค์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ๋น„์„ ํ˜• ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ํŠธ๋ฆฌ ๊ตฌ์กฐ๋Š” ๊ณ„์ธต์ ์œผ๋กœ ํ‘œํ˜„์ด ๋˜๊ณ , ์•„๋ž˜๋กœ๋งŒ ๋ป—์–ด๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ดํด์ด ์—†์Šต๋‹ˆ๋‹ค.

๊นŠ์ด (depth)

ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ๋Š” ๋ฃจํŠธ๋กœ๋ถ€ํ„ฐ ํ•˜์œ„ ๊ณ„์ธต์˜ ํŠน์ • ๋…ธ๋“œ๊นŒ์ง€์˜ ๊นŠ์ด(depth)๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ์ง€๋ฉด์— ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊นŠ์ด๊ฐ€ 0์ž…๋‹ˆ๋‹ค. ์œ„ ๊ทธ๋ฆผ์—์„œ ๋ฃจํŠธ A์˜ depth๋Š” 0์ด๊ณ , B์™€ C์˜ ๊นŠ์ด๋Š” 1์ž…๋‹ˆ๋‹ค. D, E, F, G์˜ ๊นŠ์ด๋Š” 2์ž…๋‹ˆ๋‹ค.

๋ ˆ๋ฒจ(Level)

ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ๊ฐ™์€ ๊นŠ์ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ๋ฌถ์–ด์„œ ๋ ˆ๋ฒจ(level)๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. depth๊ฐ€ 0์ธ ๋ฃจํŠธ A์˜ level์€ 1์ž…๋‹ˆ๋‹ค. depth๊ฐ€ 1์ธ B์™€ C์˜ level์€ 2์ž…๋‹ˆ๋‹ค. D, E, F, G์˜ ๋ ˆ๋ฒจ์€ 3์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ ˆ๋ฒจ์— ๋‚˜๋ž€ํžˆ ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ํ˜•์ œ ๋…ธ๋“œ(sibling Node) ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋†’์ด(Height)

ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฃจํŠธ๊นŒ์ง€์˜ ๋†’์ด(height)๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌํ”„ ๋…ธ๋“œ์™€ ์ง๊ฐ„์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์˜ ๋†’์ด๋ฅผ ํ‘œํ˜„ํ•˜๋ฉฐ, ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐ€์žฅ ๋†’์€ height ๊ฐ’์— +1ํ•œ ๊ฐ’์„ ๋†’์ด๋กœ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ๋†’์ด๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ์—๋Š” ๊ฐ ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๋†’์ด๋ฅผ 0์œผ๋กœ ๋†“์Šต๋‹ˆ๋‹ค.์œ„ ๊ทธ๋ฆผ์—์„œ H, I, E, F, J์˜ ๋†’์ด๋Š” 0์ž…๋‹ˆ๋‹ค. D์™€ G์˜ ๋†’์ด๋Š” 1์ž…๋‹ˆ๋‹ค. B์™€ C์˜ ๋†’์ด๋Š” 2์ž…๋‹ˆ๋‹ค. ์ด๋•Œ B๋Š” D์˜ height + 1 ์„, C๋Š” G์˜ height + 1 ์„ ๋†’์ด๋กœ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋ฃจํŠธ A์˜ ๋†’์ด๋Š” 3์ž…๋‹ˆ๋‹ค.

์„œ๋ธŒ ํŠธ๋ฆฌ(Sub tree)

ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ root์—์„œ ๋ป—์–ด๋‚˜์˜ค๋Š” ํฐ ํŠธ๋ฆฌ์˜ ๋‚ด๋ถ€์—, ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ–์ถ˜ ์ž‘์€ ํŠธ๋ฆฌ๋ฅผ ์„œ๋ธŒ ํŠธ๋ฆฌ ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. (D, H, I)๋กœ ์ด๋ฃจ์–ด์ง„ ์ž‘์€ ํŠธ๋ฆฌ๋„ ์„œ๋ธŒ ํŠธ๋ฆฌ์ด๊ณ , (B, D, E)๋‚˜ (C, F, G, J)๋„ ์„œ๋ธŒ ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.

์‹ค์‚ฌ์šฉ ์˜ˆ์‹œ๋กœ๋Š” ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ์žˆ๋‹ค


์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ(Binary Search Tree)

ํŠธ๋ฆฌ ๊ตฌ์กฐ๋Š” ํŽธ๋ฆฌํ•œ ๊ตฌ์กฐ๋ฅผ ์ „์‹œํ•˜๋Š” ๊ฒƒ ์™ธ์— ํšจ์œจ์ ์ธ ํƒ์ƒ‰์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๋งŽ์€ ํŠธ๋ฆฌ์˜ ๋ชจ์Šต ์ค‘, ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ณ  ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์ด์ง„ ํŠธ๋ฆฌ(binary tree)์™€ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(binary search tree)

๋จผ์ €, ์ด์ง„ํŠธ๋ฆฌ(Binary tree)๋Š” ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์ธ ๋…ธ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋œ ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋Š” ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ์™€ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ง„ ํŠธ๋ฆฌ๋Š” ์ž๋ฃŒ์˜ ์‚ฝ์ž…, ์‚ญ์ œ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ์ • ์ด์ง„ ํŠธ๋ฆฌ(Full binary tree), ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ(Complete binary tree), ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ(Perfect binary tree)๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

์ด์ง„ ํŠธ๋ฆฌ ์ข…๋ฅ˜ ์˜์–ด ํ‘œ๊ธฐ ์„ค๋ช…
์ • ์ด์ง„ ํŠธ๋ฆฌ Full binary tree ๊ฐ ๋…ธ๋“œ๊ฐ€ 0 ๊ฐœ ํ˜น์€ 2 ๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ Perfect binary tree ์ • ์ด์ง„ ํŠธ๋ฆฌ์ด๋ฉด์„œ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์ธ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๋ ˆ๋ฒจ์ด ๋™์ผํ•˜๊ณ , ๋ชจ๋“  ๋ ˆ๋ฒจ์ด ๊ฐ€๋“ ์ฑ„์›Œ์ ธ ์žˆ๋Š” ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.
์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ Complete binary tree ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๊ฐ€๋“ ์ฐจ ์žˆ์–ด์•ผ ํ•˜๊ณ , ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ๋Š” ์ „๋ถ€ ์ฐจ ์žˆ์ง€ ์•Š์•„๋„ ๋˜์ง€๋งŒ ์™ผ์ชฝ์ด ์ฑ„์›Œ์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(Binary Search Tree)๋Š” ๋ชจ๋“  ์™ผ์ชฝ ์ž์‹์˜ ๊ฐ’์ด ๋ฃจํŠธ๋‚˜ ๋ถ€๋ชจ๋ณด๋‹ค ์ž‘๊ณ , ๋ชจ๋“  ์˜ค๋ฅธ์ชฝ ์ž์‹์˜ ๊ฐ’์ด ๋ฃจํŠธ๋‚˜ ๋ถ€๋ชจ๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ๊ท ํ˜• ์žกํžŒ ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹ ๋•Œ, ์ž…๋ ฅ๋˜๋Š” ๊ฐ’์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ ํ•œ์ชฝ์œผ๋กœ ๋…ธ๋“œ๋“ค์ด ๋ชฐ๋ฆฌ๊ฒŒ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ท ํ˜•์ด ์žกํžˆ์ง€ ์•Š์€ ํŠธ๋ฆฌ๋Š” ํƒ์ƒ‰ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๊ฒฐํ•ด์•ผํ•  ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๋งˆ๋‹ค ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋ฅผ ์žฌ์กฐ์ •ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋ถ„๋ช…ํžˆ ํ, ์Šคํƒ์— ๋Œ€ํ•œ ์ •์˜์™€ ํŠน์ง•๋“ค์„ ์ดํ•ดํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋ดค๋Š”๋ฐ

์ถ”์ƒ์ ์ธ ๊ทธ๋ฆผ์œผ๋กœ ์ดํ•ดํ•œ ๊ฒƒ๊ณผ ์ง์ ‘ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„๋œ ๊ฒƒ๊ณผ๋Š”

๋„ˆ๋ฌด ๋‹ฌ๋ผ์„œ ๋‹นํ™ฉ์Šค๋Ÿฝ๊ณ , ๋จธ๋ฆฌ์†์—์„œ ๊ตฌํ˜„๋œ ์ฝ”๋“œ์™€ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋งค์นญ์ด ์•ˆ๋œ๋‹ค.

๋ฐ˜๋ณต์ด ๋‹ต์ด๋‹ˆ๊นŒ ์™„์ „ํžˆ ์ดํ•ด ๋  ๋•Œ๊นŒ์ง€ ์ž์ฃผ ๋ณด๊ณ  ๋˜ ๋ณด๊ณ  ๋˜ ๋ด์•ผ๊ฒ ๋‹ค.


๐ŸŒˆ Tomorrow

- Graph, Tree, BST, BFS&DFS ํ•™์Šต ๋ฐ ์ •๋ฆฌ

Comments