나무 숲
이진 트리 (Binary Tree) - 구현 본문
이진 트리 (Binary Tree) - 구현
배열 구현
이진 트리를 배열로 구성할 시 연결 리스트에 비해 탐색이 빠르고 쉽습니다.
위와 같은 이진 트리를 배열로 구현한다고 했을 때,
루트 노드를 배열 인덱스 0으로 설정 후 완전 이진 트리를 채워나가는 방식으로 인덱스를 부여합니다. (=다시 말하면 이진 트리에 노드가 추가될 때 그 순서를 뜻하는 것과 같습니다.)
따로 구현은 하지 않았는데 어떻게 생각해보면 트리라고 이해하기는 힘들 것 같습니다 ㅠ;;
연결 리스트 구현
연결 리스트를 통한 구현이 훨씬 더 트리의 모양을 잘 이해할 수 있는?? 구조라고 생각됩니다.
왼쪽에서 뻗어나오는 파란 팔은 양방향 연결 리스트를 생각했을 때 왼쪽 팔, 주황색 팔은 오른쪽 팔을 뜻합니다.
그냥 봐도 모양이 트리와 똑같기 때문에 직관적으로 이해하기 쉬운데요, 트리가 채워지는 방식은 배열 구현처럼 완전 이진 트리를 향해 가는 형태로 채워갈 수도 있고, (예: 서브 트리 추가 함수 하나) 오른팔/왼팔 선택하여 추가할 수도 있습니다. (예: 오른팔 서브 이진 트리 추가 함수/왼팔 서브 이진 트리 추가 함수 = 총 두 개)
트리의 주소값은 루트 노드의 주소값입니다.
노드 하나도 트리이기에, 위 그림에서 모든 트리를 찾으면 아래와 같이 표현될 수 있습니다.
728x90
반응형
'Career > 알고리즘 · 자료구조' 카테고리의 다른 글
프로그래머스 / 멀쩡한 사각형 (0) | 2020.08.21 |
---|---|
회문 (Palindrome, 回文, 팰린드롬) (0) | 2017.05.30 |
수학/ 중국인의 나머지정리 Chinese remainder theorem (0) | 2017.05.06 |
[DP] 파도반 수열 Padovan sequence (0) | 2017.04.06 |
피보나치 수열 Fibonacci Numbers / Fibonacci Sequence (0) | 2017.04.03 |
Comments