• 특징





각각의 노드는 고유한 키값이 존재


각 키값은 중복될 수 없다!


자식 노드는 최대 2개 까지


부모보다 작은 노드는 왼쪽에, 큰 노드는 오른쪽에 위치한다


탐색은 항상 최상단 루트(Root)부터




  • 삽입





새 노드의 위치를 찾기 위해서 루트(Root)부터 탐색한다.


탐색한 노드보다 새 노드가 작으면 왼쪽, 크면 오른쪽으로 계속 탐색


다음 탐색 위치가 비어있다면, 그 위치에 새 노드 삽입





삽입 종료






  • 삭제


삭제는 몇가지 종류로 나뉜다.

01. 자식이 없는 노드 삭제

02. 자식이 한쪽만 있는 노드 삭제

03. 자식이 양쪽 다 있는 노드 삭제



    • 자식이 없는 노드 삭제

가장 간단한 경우 이다.

그냥 삭제하면 된다.




    • 자식이 한쪽만 있는 노드 삭제    


삭제할 노드의 자식을

삭제노드의 위치로 옯겨주고

노드를 삭제하면 된다.








    • 자식이 양쪽 다 있는 노드 삭제


자식이 양쪽 다 있는 노드를 삭제할때

왼쪽에서 가장 큰 노드를 찾아 삭제노드 위치에 두는 방법

오른쪽에서 가장 작은 노드를 찾아 삭제노드 위치에 두는 방법등

여러 방법은 많지만, 아래의 방법은 왼쪽에서 가장 큰 노드를 찾는 방법이다.




왼쪽에서 가장 큰 노드는 오른쪽 자식 노드가 없기 때문에

고려하지 않아도 된다.




    • 삭제 전체 코드




  • 전체 코드












우선순위 큐를 활용한 정렬 알고리즘


정렬되지 않은 데이터들을 우선순위 큐에 입력하고


출력되는 순서대로 나열하며 정렬 종료


우선순위 큐 & 힙(클릭)





내림차순 정렬을 위해선 최대 힙을 사용






내림차순 정렬을 위해선 최소 힙을 사용






'알고리즘 > 정렬 알고리즘' 카테고리의 다른 글

병합 정렬(Merge Sort)  (0) 2017.02.03
기수 정렬(Radix Sort)  (0) 2017.02.02
퀵 정렬(Quick Sort)  (0) 2017.02.01
셸 정렬(Shell Sort)  (1) 2017.01.25
버블 정렬(Bubble Sort)  (0) 2017.01.25






  • 힙(Heap)


힙은 데이터에서 최대값(혹은 최소값을) 빠르게 찾을 수 있는 자료구조

힙은 완전 이진 트리다.

우선순위가 가장 높은 데이터가 제일 앞(루트)에 위치한다.

부모는 자식보다 우선순위가 더 높은 데이터가 배치된다.
(ex. 큰 데이터가 더 우선된다면, 모든 부모 노드는 자신의 자식 노드보다 더 크다)

대표적으로 최대 힙과 최소 힙이 있다.

최대 힙(Max Heap) : 
데이터 중 가장 큰 값이 루트에 위치
모든 부모 노드는 자식보다 크거나 같다.

최소 힙(Min Heap) :
데이터 중 가장 작은 값이 루트에 위치
모든 부모 노드는 자식보다 작거나 같다.






  • 배열을 활용한 힙 구현








  • 우선순위 큐(Priority Queue)



데이터들이 우선순위를 갖는다.

입력순서에는 상관없이 우선순위가 높은 데이터가 가장 먼저 처리된다.

아래의 모든 설명은 최대 힙을 활용한 우선순위 큐이다.





  • 삽입














  • 삭제








  • 전체 코드



+ Recent posts