2016-03-23 6 views
1
Template Binary Search Baumrekursion

Hier ist, was ich bisher habe:Konvertieren von STL-Liste auf einen ist

#include <stdio.h> 
#include "bintree.h" 
#include <list> 
#include <iostream> 

using namespace std; 
using namespace main_savitch_10; 

template <class Item> 
binary_tree_node<Item>* convert(list<Item> *& list, int start, int end); 

template <class Item> 
binary_tree_node<Item>* convert(list<Item> *head, int n); 

int main(int argc, char **argv) 
{ 
    list<int> L; 
    L.push_front(10); 
    L.push_back(20); 
    L.push_back(30); 
    L.push_back(40); 
    L.push_back(50); 
    L.push_back(60); 
    L.push_back(70); 
    list<int>::iterator test; 
    for(test = L.begin(); test != L.end(); test++) 
    { 
    cout<<*test<<" "; 
    } 

    binary_tree_node<int>* L2 = convert(L, 7); 

    print(L2, 3); 

} 

template <class Item> 
binary_tree_node<Item>* convert(list<Item> *& list, int start, int end) 
{ 
    if (start > end) return NULL; 
    int mid = start + (end - start)/2; 
    binary_tree_node<Item>* leftChild = convert(list, start, mid-1); 
    binary_tree_node<Item>* parent = new binary_tree_node<Item> (list->data()); 
    parent->left() = leftChild; 
    list = list->next(); 
    parent->right() = convert(list, mid+1, end); 
    return parent; 
} 

template <class Item> 
binary_tree_node<Item>* convert(list<Item> *head, int n) 
{ 
    return convert(head, 0, n-1); 
} 

Ich erhalte einen Fehler in Zeile binary_tree_node<int>* L2 = convert(L, 7);

Zu sagen, dass es für die keine passende Funktion ist Rufen Sie an ... wie ist das möglich, wenn ich sie direkt über dem Haupt aufgeführt habe?

Side Anmerkung: der „bintree.h“ und der Namespace main_savitch_10 ist aus Vorlage Implementierungsdateien von binärer Baumsuche und kann bei http://ksuweb.kennesaw.edu/~dgayler/cs3304/text_examples/chap10/bintree.h http://ksuweb.kennesaw.edu/~dgayler/cs3304/text_examples/chap10/bintree.template

+1

Kennen Sie den Unterschied zwischen einem Zeiger und allem, was kein Zeiger ist? – molbdnilo

+0

Ich verstehe das Grundkonzept hinter einem Zeiger ja, obwohl ich manchmal kämpfen, um zu unterscheiden, wann man sie benutzt. Gibt es eine bestimmte Zeile oder mehrere Zeilen, auf die Sie sich beziehen, in denen sie nicht verwendet werden sollten? @ Molbdnilo –

Antwort

0

Ihre Funktion nimmt einen Zeiger auf eine Liste zu finden. Das bedeutet, dass Sie die Adresse Ihrer Liste an sie weitergeben sollten.

0

Wenn ich aussehen af:

template <class Item> 
binary_tree_node<Item>* convert(list<Item> *head, int n) 

dann auf diese:

binary_tree_node<int>* L2 = convert(L, 7); 

und dann auf diese:

list<int> L; 

Ich könnte darüber falsch sein, aber L ist kein Zeiger, Sie verwenden nicht seine Adresse im Aufruf und die Definition will einen Zeiger.

Verwandte Themen