계층구조 ex) 파일 시스템이나 디렉터리 구조 등을 관리
구현 방법 : 배열, 포인터
배열로 구현시
인덱스 1 설정시 > 추천 : 연산이 덜함
인덱스 0 설정시
포인터로 구현시
순회시 방문 우선 순위 : 레벨이 높은 순 > 순회방법에 따라 다른 우선순위
이진 트리 구현시 가장 중요한 점
원하는 노드 탐색을 효율적으로 할 수 있도록 트리 구현
구현 방법 : 배열, 포인터
데이터 구축시 정렬했으므로,
각 노드의 차수와 노드 수가 비슷하면 : O(nlogN) 으로 판단 가능 == balanced binarary search tree (AVL 트리,레드 -블랙 트리존재)
비슷하지 않을 시 : 배열과 동일한 O(N)
주어진 데이터 : 배열
권장 시간 복잡도 : O(N)
제약조건 :
def preorder(nodes, idx):
if idx < len(nodes):
#전위 순회 : 부모 -> 왼쪽 -> 오른쪽
ret = str(nodes[idx]) + " "#부모 노드(1부터 들어옴)
ret += preorder(nodes, idx * 2)#왼쪽 자식 노드
ret += preorder(nodes, idx * 2 + 1)# 오른쪽 자식 노드
return ret
# 재귀 종료
else:
return ""
def inorder(nodes, idx):
if idx < len(nodes):
#중위 순회 : 왼쪽 -> 부모 -> 오른쪽
ret = inorder(nodes, idx * 2 )# 왼쪽 자식 노드
ret += str(nodes[idx]) + " " # 부모 노드(1부터 들어옴)
ret += inorder(nodes, idx * 2 + 1)# 오른쪽 자식 노드
return ret
else:
return ""
def postorder(nodes, idx):
if idx < len(nodes):
#중위 순회 : 왼쪽 -> 오른쪽 -> 부모
ret = postorder(nodes, idx * 2 ) # 왼쪽 자식 노드
ret += postorder(nodes, idx * 2 + 1)# 오른쪽 자식 노드
ret += str(nodes[idx]) + " " # 부모 노드(1부터 들어옴)
return ret
else:
return ""
def solution(nodes):
return [
preorder(nodes,1)[:-1],
inorder(nodes,1)[:-1],
postorder(nodes,1)[:-1],
]
# TEST 코드 입니다. 주석을 풀고 실행시켜보세요
print(solution([1, 2, 3, 4, 5, 6, 7])) # 반환값 : ["1 2 4 5 3 6 7", "4 2 5 1 6 3 7", "4 5 2 6 7 3 1"]
쉬는 날,, 차주 업로드 예정,,,
5주차 고생 많으셨습니다. 손으로 직접 트리 관련 이론적인 내용들 정리하신 부분이 인상적이네요. 연휴 및 휴강 기간 동안 휴식도 취하시고, 남는 시간에는 트리 관련 문제도 꼭 풀어보시길 바랍니다 :)