这看起来不错吗?我的意思是我正在尝试实现删除功能。
Node* BST::findNode(int tofind) {
Node* node = new Node;
node = root;
while (node != NULL) {
if (node->val == tofind) {
return node;
} else if (tofind < node->val) {
node = node->left;
} else {
node = node->right;
}
}
}
这是删除,它甚至没有接近完成,但是,
void BST::Delete(int todelete) {
// bool found = false;
Node* toDelete = new Node();
toDelete=findNode(todelete);
if(toDelete->val!=NULL) {
cout << toDelete->val << endl;
}
}
这会导致分段错误只是运行,任何想法?
答案 0 :(得分:0)
if(toDelete!=NULL) {
cout << toDelete->val << endl;
}
之前
if(toDelete->val!=NULL)
答案 1 :(得分:0)
findNode()
的主要问题是您永远不会返回您找到的节点。这就是你得到段错误的原因。
此外,在deleteNode()
中,您应该检查findNode()
是否已返回NULL
。当然,您还需要编写其余的删除逻辑。
最后,两个new Node
分配是不必要的,并且正在泄漏内存。