C++的指针为什么出问题。。。
我在写一个二叉查找树(BST),但是为什么不能用?(系统总是分配给x->left和x->right不可用的指针,这是为什么?)#if !defined (BST_H)
#define BST_H
template<class Index, class Value>
class BST
{
private:
struct Node
{
Node(Index k, Value v, int n)
:key(k), val(v), N(n)
{}
Index key;
Value val;
Node *left, *right;
int N;
};
Node *root = 0;
public:
int size()
{
return size(root);
}
Value get(Index key)
{
return get(root, key);
}
void put(Index key, Value val)
{ // Search for key. Update value if found; grow table if new.
root = put(root, key, val);
}
private:
int size(Node *x)
{
if(!x) return 0;
else return x->N;
}
Value get(Node *x, Index key)
{ // Return value associated with key in the subtree rooted at x;
// return null if key not present in subtree rooted at x.
if (!x) return 0;
int cmp = compare(key, x->key);
if (cmp < 0) return get(x->left, key);
else if (cmp > 0) return get(x->right, key);
else return x->val;
}
Node* put(Node* x, Index key, Value val)
{
if(!x)
{
x = new Node(key, val, 1);
return x;
}
int cmp = compare(key, x->key);
if(cmp < 0)
x->left= put(x->left, key, val);
else if(cmp > 0)
x->right = put(x->right, key, val);
else
x->val = val;
x->N = size(x->left) + size(x->right) + 1;
return x;
}
int compare(Index v, Index w) const
{
if(v > w) return1;
else if(v < w) return -1;
return 0;
}
};
#endif
本帖最后由 JingSao 于 2014-2-16 19:50 编辑
我理解你说的应该是root->right或root->left没有new就有值是不是
Node构造函数
struct Node
{
Node(Index k, Value v, int n)
:key(k), val(v), N(n),left(NULL), right(NULL)
{}
Index key;
Value val;
Node *left, *right;
int N;
};
这样写试试,因为没有初始化,new的时候会是未知值
JingSao 发表于 2014-2-16 19:48 static/image/common/back.gif
我理解你说的应该是root->right或root->left没有new就有值是不是
Node构造函数
struct Node
对不起,你没有理解我说的意思。这样改完了什么效果也没有。。。不过还是谢谢。 请咨询小甲鱼老师 错误早已找到了,所以标记为已经解决了,参见http://bbs.fishc.com/thread-44140-1-1.html
页:
[1]