【发布时间】:2014-04-02 00:34:47
【问题描述】:
我正在尝试定义一组模板类来表示 C++ 中的搜索树。
在 find 方法中,我需要返回包含给定键的节点的指针(表示为指针);这样我就复用find方法来实现插入和删除。
template <class K, class R>
struct Node {
K key;
R record;
inline Node(K k, R r) {
this->key = k;
this->record = r;
}
};
template <class K, class R>
struct BST_Node : public Node<K,R> {
BST_Node<K,R> *sx;
BST_Node<K,R> *dx;
inline BST_Node(K key, R record)
: Node<K,R>(key, record) {
this->sx = NULL;
this->dx = NULL;
}
BST_Node<K,R> **find(K k) {
BST_Node<K,R> **p = k < this->key ? &this->sx : &this->dx;
while (*p && k != (*p)->key)
p = k < (*p)->key ? &(*p)->sx : &(*p)->dx;
return p;
}
/* other methods */
};
只有一个小问题:如果密钥在根目录中怎么办?
我无法返回&thisbecause this,我该怎么办?
因为我想使用指向指针的指针是因为这样我可以返回一个 NULL 指针的地址,所以对于插入我可以写这样的东西:
BST_Node<K,R> *insert(K k, R r) {
BST_Node<K,R> **p = this->find(k);
if (*p == NULL) //if the search fails
*p = new BST_Node<K,R>(k, r);
return *p;
}
【问题讨论】:
-
为什么一定要返回双指针?
-
我认为没有必要返回双指针。
-
帖子编辑的原因是双指针。
标签: c++ pointers binary-tree