2017-11-14 3 views
-3

bstをリンクリストに変換しようとしていますが、リストを呼び出してディスプレイに表示しようとするとエラーが発生します。ここでバイナリ検索ツリーをリンクリストに変換するエラー

は、主な機能のために私のコードで、ここで

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; 
} 

問題は、私は最終的なリストを印刷しようとすると、私はprint文でそれを確認した場合、何も出力が正常であっても「現在の」変数出力かかわらありません、です。私は本当に間違ってどこに行くのか分からない、主な関数は単にconvertBSTtoLinkedListとprintListを呼び出します。どんな助けもありがとう!

+0

'linkedListINIT(list、root)'関数呼び出しでは 'linkedListINIT()'関数は変数 'list'を変更できません。それが何をするかは関係ありません。 C言語は厳密に値渡しであるため、*引数として渡される変数を変更することはできません。 – AlexP

答えて

0

linkedListINIT (list, root)関数呼び出しでは、linkedListINIT()関数は変数listを修正できません。それがどのように定義されているかは関係ありません。 は、C言語が厳密に値渡しであるため、引数として渡される変数を変更することはできません。

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; 
} 

は、それはあなたのために働いていたホープは、次のように!

関連する問題