0

这看起来对吗?我的意思是我正在尝试实现删除功能。

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;
    }
}

这会导致仅运行该分段错误,有什么想法吗?

4

2 回答 2

0

哦,等等,因为在删除中我应该这样做:

if(toDelete!=NULL) {
  cout << toDelete->val << endl;
}

之前

if(toDelete->val!=NULL)
于 2012-12-11T10:58:15.577 回答
0

主要问题findNode()是您永远不会返回您找到的节点。这就是你得到段错误的原因。

另外,在deleteNode()你应该检查是否findNode()已经返回NULL。当然,您还需要编写其余的删除逻辑。

最后,这两个new Node分配是不必要的并且正在泄漏内存。

于 2012-12-11T11:02:19.290 回答