2014-10-31 74 views
0

我想在C++上创建一个二叉树类,并迄今在插入和树销毁方法成功。然而,我被卡住了,并且诚实地完全丧失了搜索功能。C++二叉树帮助w /模板

具体来说,它不是混淆我的算法,而是尝试返回类的嵌套结构时的语法。

template<typename T> 
class BinaryTree{ 
    struct TreeNode{ 
     T item; 
     TreeNode *leftNode; 
     TreeNode *rightNode; 
    }; 
public: 


    BinaryTree(); 
    ~BinaryTree(); 

    void insert(T x); 
    void remove(T x); 
    TreeNode *search(T x); 

private: 
    TreeNode *mainNode; 
    void insert(T x, TreeNode *node); 
    void destroyTree(TreeNode *x); 
    TreeNode *search(T x, TreeNode *node); 
}; 


//return pointer to seached object 
template <typename T> 
typename BinaryTree<T>::TreeNode BinaryTree<T>::*search(T x){ 
return search(x, mainNode); 
} 

template <typename T> 
typename BinaryTree<T>::TreeNode BinaryTree<T>::*search(T x, BinaryTree<T>::TreeNode *node){ 
    /* problem here */ 
    return NULL; 
} 

我似乎无法设置我的*搜索方法的参数中设置*节点的类型。最初,我被困在返回类型中,但是通过在返回类型上使用typename和解析运算符找到解决方案。 (即typename BinaryTree :)如果我错了,我会非常感谢一些指导。

+0

那么,什么是你得到的错误? – 2014-10-31 09:28:06

回答

0

这将是:

template <typename T> 
typename BinaryTree<T>::TreeNode* BinaryTree<T>::search(T x) 
{ 
    .... 
    return node; 
} 

你把星号错了地方;-)

+0

工作就像一个魅力!非常感谢你! – 2014-10-31 10:44:44