繁体   English   中英

二进制搜索树中的findNode

[英]findNode in binary search tree

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

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

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

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

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

在此之前

if(toDelete->val!=NULL)

findNode()的主要问题在于,您永远不会返回找到的节点。 这就是为什么您遇到段错误。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM