删除BST中的节点

时间:2015-11-08 17:02:03

标签: c++ binary-search-tree

当我删除树的根时,我无法正常运行remove300removeNode300功能。 (在我的情况下8)。一切正常(编译明智),但是当我打电话给我inView函数时,它会按升序显示二叉树中的数字,它会将8取出并将最高数字放在8的位置。

例如: 我按此顺序插入这些数字8,4,12,2,6,10,14,20并调用我删除函数以删除8.我得到此输出2,4,5,20,10,12,14。我希望它是2,4,6,10,12,14,20

如果我能就这个过程无效的原因得到一些帮助,请告诉我。如果我必须在这篇文章中添加任何内容以帮助您,请告诉我。

结构定义:

typedef float Element300;
struct TreeNode300;
typedef TreeNode300 * TreePtr300;
struct TreeNode300
{
    Element300 element;
    TreePtr300 left;
    TreePtr300 right;
};

删除功能:

void BST300::remove300(const Element300 element, TreePtr300 & root)
{
    if(root == NULL)
    {
        cerr << "Error: Remove Failed!" << endl;
    }
    else if(element == root->element )
    {
        removeNode300(root);
    }
    else if(element < root->element)
    {
        remove300(element, root->left);
    }
    else
    {
        remove300(element, root->right);
    }
    return;
}

删除节点功能:

void BST300::removeNode300(TreePtr300 & root)
{
    TreePtr300 tempPointer = NULL;

    if(root->left == NULL && root->right == NULL)
    {
        delete root;
        root = NULL;
    }
    else if(root->right == NULL)
    {
        tempPointer = root;
        root = root->left;
        tempPointer->left = NULL;
        delete tempPointer;
    }
    else if(root->left == NULL)
    {
        tempPointer = root;
        root = root->right;
        tempPointer->right = NULL;
        delete tempPointer;
    }
    else
    {
        findMaxNode300(root->right, tempPointer);
        root->element = tempPointer->element;
        delete tempPointer;
    }
    tempPointer = NULL;
    return;
}

找到最大值函数:

void BST300::findMaxNode300(TreePtr300 & root, TreePtr300 & tempPointer)
{
    if(root->right == NULL)
    {
        tempPointer = root;
        root = root->left;
        tempPointer->left = NULL;
    }
    else
    {
        findMaxNode300(root->right, tempPointer);
    }
    return;
}

0 个答案:

没有答案