我正在研究二进制搜索树程序,我试图在给定数据的情况下找到节点的后继者。我正在关注psuedocode并觉得我正确地做了,但显然我不是因为它不起作用。
这就是我所拥有的:
ZipInfo * BinarySearchTree::treeSuccessor(string city, string state)
{
ZipInfo *successor = new ZipInfo(city, state);
ZipInfo *y = successor->getRight();
ZipInfo *yx = new ZipInfo();
if(successor->getRight() != NULL)
{
while(y->getLeft() != NULL)
{
y = y->getLeft();
}
return y;
}
else
{
yx = successor->getParent();
while((yx != NULL) && (successor == yx->getRight()))
{
successor = yx;
yx = yx->getParent();
}
return yx;
}
}
每个节点都包含城市和州的数据。因此,如果用户输入Phoenix和Arizona作为城市和州,该功能应该在BST中找到该节点的后继者。
答案 0 :(得分:1)
代码似乎期望行:
ZipInfo *successor = new ZipInfo(city, state);
将找到指向具有匹配城市和州数据的数据的节点的指针。这不会发生,因为它会将指针返回到新创建的节点。您需要首先找到实际匹配数据的现有节点(如果这样的节点甚至存在)。然后从该节点开始遍历树。