我试图在c ++上创建一个二叉树类,并且迄今为止已成功实现了插入和树销毁方法。然而,我坚持并且老实说,完全失去了搜索功能。
具体而言,在尝试返回类的嵌套结构时,算法并不会让我感到困惑。
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;
}
我似乎无法在my * search方法的参数中设置*节点的类型。最初,我被困在返回类型上,但通过在返回类型上使用typename和resolution运算符找到了解决方案。 (即typename BinaryTree::)如果我错了,我真的很感激一些指导。
答案 0 :(得分:0)
那将是:
template <typename T>
typename BinaryTree<T>::TreeNode* BinaryTree<T>::search(T x)
{
....
return node;
}
您将星号放在错误的位置; - )