我先把代码贴出来,有50行,但大家不必全看,我会指出来可能出错的地方。谢谢。
#include <iostream>
using namespace std;
template <typename key,typename value>
class BST {
typedef class node {
public:
node(key i,value va):k(i),val(va),n(1),left(NULL),right(NULL) { }
key k;
value val;
node *left, *right;
int n;
} *pnode;
int size() const { return size(root); }
int size(pnode x) { if (x = NULL) return 0; else return x.n; };
void put(key k, value val) { root = put(root, k, val); }
pnode put(pnode x, key k, value val);
pair<bool, value> get(key k) { pnode temp = get(root, k); if (temp == NULL) return{ false,0 }; else return{ true,temp.val }; }
pnode get(pnode x, key k);
private:
pnode root = NULL;
int compare(key k1, key k2) { if (k1 < k2) return -1; else if (k1>k2) return 1; else return 0; }
};
template <typename key,typename value>
BST<key, value>::put(pnode x,key k, value val)->pnode //这一行报错了!!
{
if (x = NULL) return new node(k, val);
int cmp = compare(k, x.k);
if (cmp < 0)
x.left = put(x.left, k, val);
else if (cmp>0)
x.right = put(x.right, k, val);
else
x.val = val;
x.n = size(x.left) + size(x.right) + 1;
return x;
}
template <typename key, typename value>
BST<key, value>::get(pnode x, key k)->pnode //这一行报错了!!!
{
if (x = NULL) return NULL;
int cmp = compare(k, x.k);
if (cmp < 0)
return get(x.left, k);
else if (cmp>0)
return get(x.right, k);
else
return x;
}
下面是报错的截图(visual studio 2015):
“->pnode”这是什么用法?没见过,难道是高级写法?
“BST::get(pnode x, key k)”前面不要加返回值类型吗?
楼主代码copy过来编译通不过,错误很多。
可能是编译器的原因;
而且有部分超出了我的理解范围,菜鸟一个请不要介意。
1)函数后面跟个->pnode是什么意思?
2)非静态成员变量能这样初始化么?类在声明时是没有分配存储空间的,你这是定义吧?
错误没找出来,反倒问了一堆,楼主勿怪。
int size(pnode x) { if (x = NULL) return 0; else return x.n };
应该是
int size(pnode x) { if (x = NULL) return 0; else return x.n; }
注意最后分号的位置。
还有一个与你的问题无关的:
if (x = NULL) 应该是 if (x == NULL) 吧
直接用auto
auto BST<key, value>::put(pnode x,key k, value val)