2016-03-23 25 views
0

stl listesinin ilk düğümünü bir ikili ağaç düğümüne atama çalışıyorum ... Karşılaştığım sorun stl listelenen işlevlerde bir araç görmüyorum bunu yapmama izin vermek için. Örneğinstl listesinin ilk düğümüne erişme

: Aşağıdaki liste oluşturursanız :

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

liste olmalıdır: 10,20,30,40,50,60,70 ...

Benim sorum , listenin ilk düğümüne yeni bir düğüm (özellikle ikili ağaç düğümü kullanıyorum) atamanın bir yolu var mı. Listeyi bir ikili ağaca dönüştüren bir işleve geçmek için tamsayı değerine düğüm değerine ihtiyacım var.

Bu bilinen nedenlerle işe yaramadı: Yeni bir o ilk düğüm atamak için bir yol olup olmadığını bir düğüm değeri bir tamsayı atamak için çalışıyor olarak

binary_tree_node<Item> *node = list.front(); 

ama sadece merak ettim düğümü.

Bu

şimdi sizi, Yani sınıfta binary_tree_node<T> bir yapıcı hale ben

template <class Item> 
binary_tree_node<Item>* convert(list<Item> &list, int start, int end) 
{ 
binary_tree_node<Item> *node = list.front(); 
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> (node->data()); 
parent->left() = leftChild; 
node = node->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); 
} 
+0

'binary_tree_node' nedir? özel sınıfın mı? – Jarod42

+0

Ne yapmaya çalışıyorsun? ikili ağaç oluştur İkili ağaç düğümünde 'std :: list'ünü kullanın? Düğümleri içermek için 'std :: list'ünü kullanın? –

+0

Bu ders için kullanılan ders kitabı yazarı tarafından yazılmış özel bir şablon sınıfı uygulaması. @ Jarod42 –

cevap

0

kullanmaya çalışıyorum işlevi ı önerir, bu :: gibi bir şey

class binary_tree_node<T> { 
    T classMember; 

    binary_tree_node(T &data) { 
     classMember = data; 
    } 
} 

olduğunu Bir düğüm oluşturmak için list içinde depolanan Item değerleri alıyorsanız, bu gibi bir şeyler yapabilirsiniz ::

binary_tree_node<Item> *node = new binary_tree_node(list.front()); 

Ayrıca, list.front() sadece listedeki ilk elementi verir, bir sonraki tekrarlamaya girmeden önce onu kaldırmak istediğinizi düşünüyorum, bu yüzden listedeki ilk öğe kullanılmadığında list.pop_front()'u aradığınızdan emin olun!