访问stl list

时间:2016-03-23 21:49:29

标签: c++ recursion 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);
}

1 个答案:

答案 0 :(得分: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()这个清单没用!