반응형
    
    
    
  중위 순회의 이진 트리에서 재귀의 탈출 조건은 다음과 같다.
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 |