AVL寻找继任者

时间:2012-02-24 21:17:33

标签: c++ find avl-tree

这是我的继任者:

int 
BalancedTree::successor( TreeNode *node ) // successor is the left-most child of its right subtree,
{ 
  TreeNode *tmp = node;
  int successorVal = -1;
  tmp = tmp->m_RChild;

  if( NULL != tmp )
  {
    while( NULL != tmp->m_LChild )
      tmp = tmp->m_LChild;

    // now at left most child of right subtree
    successorVal = tmp->m_nodeData;
  }

  return successorVal;

} // successor()

我的导师给了我们一个充满随机数据的文件。我将所有这些数据放入树中,insert方法可以工作,但是一旦remove方法启动,后续函数在某一点返回我正在寻找后继节点的节点的相同值。这不应该是正确的吗?我的继任者职能是否正确?如果你想看看删除方法,只需提一下。

1 个答案:

答案 0 :(得分:0)

你对继任者的定义已经存在缺陷:如果节点没有正确的节点,则后继者是其祖先之一:第一个人的左子节点是节点或其祖先之一。只有当没有这样的祖先存在时,才有继承者。我个人会将一个迭代器返回给节点,否则代码似乎没问题。