私のコードはアルゴリズムを考えるとうまくいくように見えますが、私は C++ が初めてで、insert を複数回呼び出すと、これらのポインターが自分自身を上書きしているようです。たとえば、insert を値 1、3、5 で呼び出すと、ルートは (予想どおり) 1 になりますが、3 は上書きされ、ルートの右の子の値は 3 ではなく 5 になります。
virtual bool insert(const Data& item) {
if(root == NULL){
BSTNode<Data> newNode (item);
root = &newNode;
isize++;
return true;
}
BSTNode<Data>* nextNode = root;
BSTNode<Data>* prevNode = NULL;
bool isLeft;
while(nextNode!=NULL) {
if (item < nextNode->data) {
prevNode = nextNode;
nextNode = nextNode->left;
//std::cout << prevNode->data;
isLeft = true;
}
else {
prevNode = nextNode;
nextNode = nextNode->right;
//std::cout << prevNode->data;
isLeft = false;
}
}
BSTNode<Data> createNode (item);
createNode.parent = prevNode;
if (isLeft) prevNode->left = &createNode;
else prevNode->right = &createNode;
isize++;
return true;
}