C++ 节点实现二叉树

C++ 节点实现二叉树,c++,parameters,tree,nodes,C++,Parameters,Tree,Nodes,我为node类提供了以下实现: template<class T> class binTree; // forward declaration template<class T> class Node { friend class binTree<T>; // class binTree is friend public: //default constructor Node(const

我为node类提供了以下实现:

template<class T> class binTree;          // forward declaration

template<class T> class Node {
friend class binTree<T>;                  // class binTree is friend

public:
    //default constructor
    Node(const T& d = T(), Node<T> *l = NULL, Node<T> *r = NULL) : data(d),
            left(l), right(r) {};

private:
    T data;
    Node<T> *left, *right;
};
模板类binTree;//远期申报
模板类节点{
friend类binTree;//类binTree是friend
公众:
//默认构造函数
节点(常量T&d=T(),节点*l=NULL,节点*r=NULL):数据(d),
左(l),右(r){};
私人:
T数据;
节点*左,*右;
};
我试图在我的树的根上定义一个新的节点,但是我不断得到编译错误

template<class T>
void binTree<T>::insert(Node<T>*& n, const T& d){
    if(n == NULL)
       root = Node<T>(d); 
}
模板
void binTree::insert(节点*&n,常量T&d){
如果(n==NULL)
根=节点(d);
}

我被
const T&d=T()参数弄糊涂了

我认为在定义成员之前只需要声明binTree类及其成员。以下代码为我编译:

#include <cstdlib>

template<class T> class binTree;          // forward declaration

template<class T> class Node {
friend class binTree<T>;                  // class binTree is friend

public:
    //default constructor
    Node(const T& d = T(), Node<T> *l = NULL, Node<T> *r = NULL) : data(d),
            left(l), right(r) {};

private:
    T data;
    Node<T> *left, *right;
};

template <class T> class binTree
{
    public:
    binTree() { }
    void insert(Node<T>*& n, const T& d);

    private:
    Node<T> root;
};

template<class T>
void binTree<T>::insert(Node<T>*& n, const T& d){
    if(n == NULL)
       root = Node<T>(d); 
}



int main(int argc, char **argv)
{
    Node<int>* nt;
    binTree<int> btree;
    btree.insert(nt, 4);
}
#包括
模板类binTree;//远期申报
模板类节点{
friend类binTree;//类binTree是friend
公众:
//默认构造函数
节点(常量T&d=T(),节点*l=NULL,节点*r=NULL):数据(d),
左(l),右(r){};
私人:
T数据;
节点*左,*右;
};
模板类二叉树
{
公众:
binTree(){}
无效插入(节点*&n,常数T&d);
私人:
节根;
};
模板
void binTree::insert(节点*&n,常量T&d){
如果(n==NULL)
根=节点(d);
}
int main(int argc,字符**argv)
{
节点*nt;
二叉树;
b.插入树(nt,4);
}

话虽如此,您的数据结构概念似乎混乱不堪。为什么binTree中的insert例程需要一个节点参数?

我不太清楚为什么在默认构造函数中对d变量进行默认重写。在我的树类的节点实现中,我没有默认的赋值。我认为问题是T()。我建议不要尝试在params列表中执行默认赋值,而是在BMI列表中执行。所以它看起来有点像“数据(新T),左(空),右(空)”

此外,我想说我不太确定为什么要使用T()。如果这不起作用,请发布错误代码,以便我们更好地了解正在发生的事情