当我删除树的根时,我无法正常运行remove300
和removeNode300
功能。 (在我的情况下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;
}