我正在尝试将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 :(得分: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()
这个清单没用!