尝试从二叉树中删除不存在的节点

时间:2019-04-27 16:24:50

标签: c++

需要有关如何正确处理尝试从二叉树中删除节点的错误的帮助,但该节点不存在。当我使用树中不存在的数字调用tree.remove()函数时,出现错误。希望能够意识到该节点不存在,并让用户知道它不在树中,然后继续进行下一个操作。

 void IntBinaryTree::remove(int num)
 {
deleteNode(num, root);
 }



 void IntBinaryTree::deleteNode(int num, TreeNode *&nodePtr)
 {
if (num < nodePtr->value)
    deleteNode(num, nodePtr->left);
else if (num > nodePtr->value)
    deleteNode(num, nodePtr->right);
else
    makeDeletion(nodePtr);
 }


void IntBinaryTree::makeDeletion(TreeNode *&nodePtr)
{
// Define a temporary pointer to use in reattaching
// the left subtree.
TreeNode *tempNodePtr = nullptr;

if (nodePtr == nullptr)
    cout << "Cannot delete empty node.\n";
else if (nodePtr->right == nullptr)
{
    tempNodePtr = nodePtr;
    nodePtr = nodePtr->left;   // Reattach the left child
    delete tempNodePtr;
}
else if (nodePtr->left == nullptr)
{
    tempNodePtr = nodePtr;
    nodePtr = nodePtr->right;  // Reattach the right child
    delete tempNodePtr;
}
// If the node has two children.
else
{
    // Move one node the right.
    tempNodePtr = nodePtr->right;
    // Go to the end left node.
    while (tempNodePtr->left)
        tempNodePtr = tempNodePtr->left;
    // Reattach the left subtree.
    tempNodePtr->left = nodePtr->left;
    tempNodePtr = nodePtr;
    // Reattach the right subtree.
    nodePtr = nodePtr->right;
    delete tempNodePtr;
}
}

0 个答案:

没有答案