CHAPTER 5 Tree 5 4 Binary Tree Traversal
CHAPTER 5 트리(Tree)
5. 4 이진 트리 순회(Binary Tree Traversal) ① 중위순회(Left - Visit - Right) ⅰ) NULL 노드에 도달할 때까지 Left(왼쪽) 방향으로 이동 ⅱ) NULL 노드에 도착하면 NULL 노드의 부모를 Visit ⅲ) Right(오른쪽) 방향으로 순회 계속 void inorder(tree. Ptr ptr) { if(ptr) { ① inorder(ptr→left. Child); ② printf("%s", ptr→data); ③ inorder(ptr→right. Child); } } 순서 : X/Y*Z*A+B 13
5. 4 이진 트리 순회(Binary Tree Traversal) ② 전위순회(Visit - Left - Right) ⅰ) 루트부터 노드를 Visit ⅱ) NULL 노드에 도착할 때가지 왼쪽(Left) 방향으로 이동 ⅲ) NULL 노드에 도착하면 오른쪽(Right) 방향으로 이동 void preorder(tree. Ptr ptr) { if(ptr) { printf("%s", ptr→data); preorder(ptr→left. Child); preorder(ptr→right. Child); } } 순서 : +**/XYZAB 14
5. 4 이진 트리 순회(Binary Tree Traversal) ③ 후위순회(Left - Right - Visit) 왼쪽 서브트리의 모든 노드들을 출력하고, 오른쪽 서브트리의 모든 노드들을 출력한 후 부모 노드를 출력한다. void postorder(tree. Ptr ptr) { if(ptr) { postorder(ptr→left. Child); postorder(ptr→right. Child); printf("%s", ptr→data); } } 순서 : XY/Z*A*B+ 15
5. 4 이진 트리 순회(Binary Tree Traversal) <전위 운행> 1 N 3 2 2 -1 2 -2 3 -1 2 -3 3 -2 3 -3 16
5. 4 이진 트리 순회(Binary Tree Traversal) <중위 운행> 2 N 3 1 1 -2 1 -1 3 -2 1 -3 3 -1 3 -3 17
5. 4 이진 트리 순회(Binary Tree Traversal) <후위 운행> 3 N 2 1 1 -3 1 -1 2 -3 1 -2 2 -1 3 -3 2 -2 18
5. 4 이진 트리 순회(Binary Tree Traversal) 전위 운행 순서 ABDHIECFG A B 중위 운행 순서 C HDIBEAFCG D H E I F G 후위 운행 순서 HIDEBFGCA 19
5. 5 쓰레드 이진 트리(Thread Binary Tree) 1) 중위순회 후행 노드 찾는 방법 if ptr→right. Thread = TRUE then ptr→right. Child; (후행 노드) else { temp = ptr→right. Child; while(!temp→left. Thread) { temp = temp→left. Child; (후행 노드) } return temp; } 22
5. 5 쓰레드 이진 트리(Thread Binary Tree) 2) 노드 삽입 ⅰ) 오른쪽 서브트리가 공백인 부모 오른쪽에 자식으로 삽입 ⇒ parent→right. Thread = FALSE child→left. Thread = TRUE child→right. Thread = TRUE child→left. Child = parent child→right. Child = parent→right. Child = child 23
5. 5 쓰레드 이진 트리(Thread Binary Tree) 2) 노드 삽입 ⅱ) 오른쪽 서브트리가 공백이 아닌 경우 child→right. Child = parent→right. Child child→right. Thread = parent→right. Thread child→left. Thread = TRUE child→left. Child = parent→right. Child = child parent→right. Thread = FALSE child의 중위순회가 자식을 가리키게 함 temp→left. Child = child /* FALSE */ 24
5. 11 2 -3 트리(Two-three Trees) , data_r Data_l. key Data_r. key 35
- Slides: 37