二叉搜索树中的findNode

时间:2012-12-11 10:55:56

标签: c++ find 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;
    }
}

这会导致分段错误只是运行,任何想法?

2 个答案:

答案 0 :(得分:0)

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

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

之前

if(toDelete->val!=NULL)

答案 1 :(得分:0)

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

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

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