二叉搜索树后继功能

时间:2014-03-27 05:04:45

标签: c++

我正在研究二进制搜索树程序,我试图在给定数据的情况下找到节点的后继者。我正在关注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中找到该节点的后继者。

1 个答案:

答案 0 :(得分:1)

代码似乎期望行:

ZipInfo *successor = new ZipInfo(city, state);

将找到指向具有匹配城市和州数据的数据的节点的指针。这不会发生,因为它会将指针返回到新创建的节点。您需要首先找到实际匹配数据的现有节点(如果这样的节点甚至存在)。然后从该节点开始遍历树。