【发布时间】:2011-12-18 04:07:21
【问题描述】:
我有一个BinarySearchTree,它由节点组成,这些节点都是 dataType student 的模板类,其中 student 是一个具有 name 和 Grade 私有变量的类。
目前我可以打印树,在树中查找名称和/或等级,但我无法从树中删除节点。
我正在尝试删除所有成绩
删除节点后,需要发生以下情况之一:
- 左孩子为空:用右孩子替换节点。
- 左子不为空:用左边最高元素替换节点 分支。
我的理解是,如果这是树的话:
1
/ \
2 3
/ \ /\
4 5 6 7
如果 2 次失败,即成绩
你最终会得到
1
/ \
4 3
\ / \
5 6 7
4 是左分支中的最高元素。
如果这是树:
1
/ \
2 3
\ / \
5 6 7
2 次失败
你最终会得到
1
/ \
5 3
/ \
6 7
如果这是树:
1
/ \
2 3
/ \ / \
4 5 6 7
1 次失败
你最终会得到
5
/ \
2 3
/ / \
4 6 7
我在尝试创建函数来执行此操作时遇到了很多麻烦,目前我有:
void checkBranch() //called from main - used to pass the root node to checkBranch()
{
checkBranch(studentTree.getRoot());
}
bool checkBranch(BTNode<Student>* currentNode)
{
if (currentNode != NULL)
{
if (checkBranch(currentNode -> getLeft()))
{
deleteNode(currentNode, true);
}
if (checkBranch(currentNode -> getRight()))
{
deleteNode(currentNode, false);
}
return (currentNode -> getData().getGrade() < 50.0);
}
else
{
return false;
}
}
现在我正在尝试添加 deleteNode 函数,我只是卡在该做什么/处理需要发生的事情上:
void deleteNode(BTNode<Student> *parentNode, bool left)
{
BTNode<Student>* nodeToDelete;
if (left)
{
nodeToDelete = parentNode->getLeft();
}
}
【问题讨论】:
标签: c++ memory-management tree binary-tree