C++ 将STL列表转换为二叉搜索树递归模板

C++ 将STL列表转换为二叉搜索树递归模板,c++,recursion,stl,C++,Recursion,Stl,以下是我到目前为止的情况: #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> *&a

以下是我到目前为止的情况:

#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);
}
#包括
#包括“bintree.h”
#包括
#包括
使用名称空间std;
使用名称空间main_savitch_10;
模板
二叉树节点*转换(列表*&列表,整数开始,整数结束);
模板
二叉树节点*转换(列表*头,整数n);
int main(int argc,字符**argv)
{
清单L;
L.向前推(10);
L.推回(20);
L.推回(30);
L.推回(40);
L.推回(50);
L.推回(60);
L.推回(70);
列表::迭代器测试;
for(test=L.begin();test!=L.end();test++)
{
coutnext();
父->右()=转换(列表,中间+1,结束);
返回父母;
}
模板
二叉树节点*转换(列表*头,整数n)
{
返回转换(头,0,n-1);
}
我在第二行出错了
二叉树节点*L2=convert(L,7);

说调用没有匹配的函数…当我把它们列在main的正上方时,这怎么可能呢

旁注:“bintree.h”和名称空间main_savitch_10来自二进制搜索树的模板实现文件,可以在

您的函数使用指向列表的指针。这意味着您应该将列表的地址传递给它。

您的函数使用指向列表的指针。这意味着您应该将列表的地址传递给它。

如果我查看以下内容:

template <class Item> 
binary_tree_node<Item>* convert(list<Item> *head, int n) 
模板
二叉树节点*转换(列表*头,整数n)
这时:

binary_tree_node<int>* L2 = convert(L, 7);
二叉树节点*L2=convert(L,7);
然后在这里:

list<int> L;
列表L;
我可能错了,但L不是指针,你在调用中不使用它的地址,定义需要一个指针。

如果我这样看:

template <class Item> 
binary_tree_node<Item>* convert(list<Item> *head, int n) 
模板
二叉树节点*转换(列表*头,整数n)
这时:

binary_tree_node<int>* L2 = convert(L, 7);
二叉树节点*L2=convert(L,7);
然后在这里:

list<int> L;
列表L;

我可能错了,但L不是指针,你在调用中不使用它的地址,定义需要一个指针。

你知道指针和所有非指针的东西之间的区别吗?我理解指针背后的基本概念是的,尽管有时我很难区分何时使用它们。有什么特定的区别吗你所指的一行或几行不应该使用它们?@molbdniloDo你知道指针和所有非指针的东西之间的区别吗?我理解指针背后的基本概念是的,尽管有时我很难区分何时使用它们。你指的是某一行或几行吗不应在其中使用它们?@molbdnilo