2017-11-14 5 views
-3

연결된 목록으로 변환하려고하는데 디스플레이에 인쇄 할 때 목록을 불러 오려고 할 때 오류가 발생합니다.이진 검색 트리를 연결된 목록으로 변환하는 중 오류가 발생했습니다.

여기 여기

ListNodePtr createListnode(int key) { 
    ListNodePtr newList = (ListNodePtr)malloc(sizeof(struct ListNode)); 

    if (newList != NULL) { 
      newList->key = key; 
      newList->next = NULL; 
      return newList; 
    } else { 
      return NULL; 
    } 
} 

ListNodePtr insertNodeIntoList(ListNodePtr root, const ListNodePtr z) { 
    if (root == NULL) { 
      root = createListnode(z->key); 
    } else { 
      root->next = insertNodeIntoList(root->next, z); 
    } 
    return root; 
} 

void linkedListINIT(ListNodePtr list, TreeNodePtr root) { 
    if (root != NULL) { 
      linkedListINIT(list, root->left); 
      ListNodePtr current = createListnode(root->key); 
      list = insertNodeIntoList(list, current); 
      linkedListINIT(list, root->right); 
    } 
    return; 
} 

ListNodePtr convertBSTtoLinkedList(TreeNodePtr root) { 
    ListNodePtr list = NULL; 

    linkedListINIT(list, root); 

    return list; 
} 

가 listNodePtr 및 인쇄 기능에 대한 초기화이며, 주요 기능에 대한 내 코드입니다.

struct ListNode { 
    int key; 
    struct ListNode *next; 
}; 

typedef struct ListNode *ListNodePtr; 

void printList(ListNodePtr head) { 
    if (head != NULL) { 
      printf("%d ", head->key); 
      printList(head->next); 
    } 
    return; 
} 

내가 최종 목록을 인쇄 할 때 문제는, 내가 인쇄 문으로 그것을 확인 제대로 경우에도 '현재'변수 출력하지만 출력이 없습니다. 어디서 잘못되었는지는 잘 모르겠지만 main 함수는 convertBSTtoLinkedList와 printList를 호출합니다. 어떤 도움을 주시면 감사하겠습니다!

+0

'linkedListINIT (list, root)'함수 호출에서'linkedListINIT()'함수는 변수'list'를 수정할 수 없습니다. 그것이하는 일은 중요하지 않습니다. C 언어는 값에 의해 엄격하게 전달되기 때문에 인자 *로 전달 된 변수를 수정할 수 없습니다. – AlexP

답변

0

linkedListINIT (list, root) 함수 호출에서 linkedListINIT() 함수는 변수 list을 수정할 수 없습니다. 그것이 어떻게 정의되는지는 중요하지 않습니다. 단순히 은 C 언어가 엄격하게 pass-by-value이기 때문에 인수로 전달 된 변수를 수정할 수 없습니다.

그래서 convertBSTtoLinkedList()의 정의 이상을 읽지 않고 항상 NULL을 반환한다는 것을 알고 있습니다.

+0

그래서 인자 포인터를 만들어야할까요? 나는 그것을 시도하고 나는 세분화 결함을 받고 계속 .. – Connor

0

수정 기능 insertNodeIntoList()linkedListINIT()

ListNodePtr insertNodeIntoList(ListNodePtr root, int z) { 
    if (root == NULL) { 
      root = createListnode(z); 
    } else { 
      root->next = insertNodeIntoList(root->next, z); 
    } 
    return root; 
} 

void linkedListINIT(ListNodePtr list, TreeNodePtr root) { 
    if (root != NULL) { 
      linkedListINIT(list, root->left); 
      list = insertNodeIntoList(list, root->key); 
      linkedListINIT(list, root->right); 
    } 
    return; 
} 

가 당신을 위해 일을 희망 다음과 같이!

관련 문제