트리 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 아이디(ID)으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
19번째 줄: 19번째 줄:
 
* '''Internal Node(내부노드, 비단말 노드)''' : 단말 노드를 제외한 모든 노드로 루트 노드를 포함한다.<ref name='tree'></ref>
 
* '''Internal Node(내부노드, 비단말 노드)''' : 단말 노드를 제외한 모든 노드로 루트 노드를 포함한다.<ref name='tree'></ref>
 
== 트리 순회 (tree traversal) ==
 
== 트리 순회 (tree traversal) ==
트리 순회란 트리의 각 노드를 체계적인 방법으로 방문하는 과정을 말한다. 하나도 빠뜨리지 않고 , 정확히 한 번만 중복 없이 방문해야 한다.<br>
+
트리 순회란 트리의 각 노드를 체계적인 방법으로 방문하는 과정을 말한다. 하나도 빠뜨리지 않고 , 정확히 한번만 중복없이 방문해야한다.<br>
노드를 방문하는 순서에 따라 전위순회(preorder), 중위순회(inorder), 후위순회(postorder) 세 가지로 나뉜다.<br><ref name='binary_search_tree'>hanrimjo,〈[https://velog.io/@hanrimjo/%EC%9D%B4%EC%A7%84-%ED%83%90%EC%83%89-%ED%8A%B8%EB%A6%AC-Binary-Search-Tree-8gk6ablvfx 이진 탐색 트리]〉, 2020년 2월 7일</ref>
+
노드를 방문 하는 순서에 따라 전위순회(preorder), 중위순회(inorder), 후위순회(postorder)세가지로 나뉜다.<br>
[[파일:트리순회.png]]<ref name='binary_search_tree'></ref>
+
[[파일:트리순회.png]]
 
=== 전위순회 (preorder) ===
 
=== 전위순회 (preorder) ===
루트 노드에서 시작해서 노드 -> 왼쪽 서브트리 -> 오른쪽 서브트리 순으로 순회하는 방식. 깊이 우선순회(depth-first-traversal)라고도 한다.
+
루트 노드에서 시작해서 노드 -> 왼쪽 서브트리 -> 오른쪽 서브트리 순으로 순회하는 방식. 깊이 우선순회(depth-first-traversal) 라고도 한다.
- 1 -> 2 -> 4 -> 5 -> 3<ref name='binary_search_tree'></ref>
+
- 1 -> 2 -> 4 -> 5 -> 3
 
=== 중위순회 (inorder) ===
 
=== 중위순회 (inorder) ===
루트노드에서 시작해서 왼쪽 서브트리노드 -> 오른쪽 서브트리 순으로 순회하는 방식. 대칭 순회(symmetric traversal)라고도 불린다.
+
루트노드에서 시작해서 왼쪽 서브트리노드 -> 오른쪽 서브트리 순으로 순회하는 방식. 대칭 순회(symmetric traversal)이라고도 불린다.
- 4 -> 2 -> 5 -> 1 -> 3<ref name='binary_search_tree'></ref>
+
- 4 -> 2 -> 5 -> 1 -> 3
 
=== 후위순회 (postorder) ===
 
=== 후위순회 (postorder) ===
 
루트 노드에서 시작해서 왼쪽 서브트리 -> 오른쪽 서브트리 -> 노드 순으로 순회하는 방식
 
루트 노드에서 시작해서 왼쪽 서브트리 -> 오른쪽 서브트리 -> 노드 순으로 순회하는 방식
- 4 -> 5 -> 2 -> 3 -> 1<ref name='binary_search_tree'></ref>
+
- 4 -> 5 -> 2 -> 3 -> 1
  
 
== 이진 트리 (binary tree) ==
 
== 이진 트리 (binary tree) ==
53번째 줄: 53번째 줄:
 
:이진탐색의 효율적인 탐색 능력을 유지하면서도, 빈번한 자료 입력과 삭제를 가능하게끔 고안됐다.
 
:이진탐색의 효율적인 탐색 능력을 유지하면서도, 빈번한 자료 입력과 삭제를 가능하게끔 고안됐다.
 
:예를들면 이진탐색의 경우 탐색에 소요되는 계산복잡성은 O(logN)으로 빠르지만 자료입력이나 삭제가 불가능하다.
 
:예를들면 이진탐색의 경우 탐색에 소요되는 계산복잡성은 O(logN)으로 빠르지만 자료입력이나 삭제가 불가능하다.
:연결 리스트의 경우 자료입력, 삭제에 필요한 계산 복잡성은 O(1)로 효율적이지만 탐색하는 데에는 O(n)의 계산 복잡성이 발생한다. 이 두개의 장점을 살려보는 것이 이진 탐색트리의 목적이라고 할 수 있다.<ref name='binary_search_tree'></ref>
+
:연결 리스트의 경우 자료입력, 삭제에 필요한 계산 복잡성은 O(1)로 효율적이지만 탐색하는 데에는 O(n)의 계산 복잡성이 발생한다. 이 두개의 장점을 살려보는 것이 이진 탐색트리의 목적이라고 할 수 있다.
[[파일:이진탐색트리.png]]<ref name='binary_search_tree'></ref>
 
=== 속성 ===
 
* 각 노드의 왼쪽 서브트리에는 해당 노드의 값보다 작은 값을 지닌 노드들로 이루어져 있다.
 
* 각 노드의 오른쪽 서브트리에는 해당 노드의 값보다 큰 값을 지닌 노드들로 이루어져 있다.
 
* 중복된 노드가 없어야 한다.
 
*왼쪽 서브트리, 오른쪽 서브트리 또한 이진 탐색트리이다.
 
*이진 탐색트리를 순회할 때에는 중위순회(inorder)방식을 사용한다.
 
:- 왼쪽 서브트리 -> 노드 -> 오른쪽 서브트리 순으로<ref name='binary_search_tree'></ref>
 
[[파일:이진탐색트리속성.png]]<br><ref name='binary_search_tree'></ref>
 
위의 그림에서 중위순회를 사용한다면, 순서는 1, 3, 5, 7, 8, 10 순서로 순회한다.<ref name='binary_search_tree'></ref>
 
  
{{ 각주 }}
 
 
== 참고자료 ==
 
* adam2,〈[https://velog.io/@adam2/TREE 자료구조 Tree]〉, 2020년 4월 5일</ref>
 
* hanrimjo,〈[https://velog.io/@hanrimjo/%EC%9D%B4%EC%A7%84-%ED%83%90%EC%83%89-%ED%8A%B8%EB%A6%AC-Binary-Search-Tree-8gk6ablvfx 이진 탐색 트리]〉, 2020년 2월 7일
 
 
== 같이 보기 ==
 
== 같이 보기 ==
 
* [[자료구조]]
 
* [[자료구조]]
  
{{데이터|검토 필요}}
+
{{데이터|토막글}}

해시넷에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 해시넷:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 | 편집 도움말 (새 창에서 열림)