반응형
중위 순회의 이진 트리에서 재귀의 탈출 조건은 다음과 같다.
1 2 3 4 5 6 7 8 9 | void InorderTraverse(BTreeNode *bt) { if( bt == NULL ) return ; InorderTraverse(bt->left); printf("%d \n", bt->data); InorderTraverse(bt->right); } | Crocus |
이때, bt->left가 없는데 전달이 되나라고 생각 할 수 있다.
하지만, 이전 게시물에서의 이진 트리 구조를 생각해보면 다음과 같다.
1 2 3 4 5 6 7 | BTreeNode *MakeBTreeNode(void) { BTreeNode *nd = (BTreeNode*)malloc(sizeof(BTreeNode)); nd->left = NULL; nd->right = NULL; return nd; } | Crocus |
노드가 비어있으면 NULL로 취급하고 있다는 것에 주목해야한다.
따라서 왼쪽 또는 오른쪽 서브 노드가 없다면
결국 if( bt == NULL )에 걸리게 되고 탈출 할 수 있게 된다.
그렇다면 전위 순회 및 후위 순회는 어떻게 코드가 이루어 질까?
< 전위 순회 코드 >
1 2 3 4 5 6 7 8 9 | void InorderTraverse(BTreeNode *bt) { if( bt == NULL ) return ; printf("%d \n", bt->data); InorderTraverse(bt->left); InorderTraverse(bt->right); } | Crocus |
< 후위 순회 코드 >
1 2 3 4 5 6 7 8 9 | void InorderTraverse(BTreeNode *bt) { if( bt == NULL ) return ; InorderTraverse(bt->left); InorderTraverse(bt->right); printf("%d \n", bt->data); } | Crocus |
반응형
'Applied > 자료구조' 카테고리의 다른 글
이진 트리 소스 코드 (순회) (0) | 2016.05.23 |
---|---|
이진 트리 소스 코드 (기본) (0) | 2016.05.23 |
이진 트리 순회(Traversal) (1) (2) | 2016.05.19 |
이중 연결 리스트(Double Linked List) 소스 코드 (0) | 2016.05.11 |
이중 연결 리스트(Double Linked List) 개념 (0) | 2016.05.11 |