2016-03-23 3 views
0

Я пытаюсь назначить первый узел списка stl двоичному узлу дерева ... Проблема, с которой я столкнулся, заключается в том, что я не вижу инструмент в перечисленных выше функциях stl чтобы позволить мне это сделать.Доступ к первому узлу списка stl

Например: Если я создаю следующий список:

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

Список должен быть: 10,20,30,40,50,60,70 ...

Мой вопрос , есть способ назначить новый узел (в частности, я использую узел двоичного дерева) для первого узла списка. Мне нужно значение узла, а не целочисленное значение, чтобы перейти к функции, которая преобразует список в двоичное дерево.

Это не работает по очевидным причинам:

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

, как он пытается присвоить целое число в значение узла, но мне было просто интересно, если есть способ, чтобы назначить этот первый узел на новый узел.

Это функция, которую я пытаюсь использовать

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'? ваш собственный класс? – Jarod42

+0

Что вы пытаетесь сделать? создать двоичное дерево? Использовать 'std :: list' в вашем двоичном дереве? Использовать 'std :: list', чтобы содержать узлы? –

+0

- это специальная реализация класса шаблонов, написанная автором учебника, используемого для этого курса. @ Jarod42 –

ответ

0

Я предлагаю вам сделать конструктор в классе binary_tree_node<T>, что-то вроде этого ::

class binary_tree_node<T> { 
    T classMember; 

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

Итак, теперь, когда ты принимают значения Item, хранящиеся в list для построения узла, вы можете сделать что-то вроде этого:

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

Кроме того, list.front() дает только первый элемент в списке, я думаю, вы хотели бы удалить его, прежде чем переходить к следующей рекурсии, поэтому убедитесь, что вы вызываете list.pop_front(), когда первый элемент в списке бесполезен!

Смежные вопросы