这是我的继任者:
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方法启动,后续函数在某一点返回我正在寻找后继节点的节点的相同值。这不应该是正确的吗?我的继任者职能是否正确?如果你想看看删除方法,只需提一下。
答案 0 :(得分:0)
你对继任者的定义已经存在缺陷:如果节点没有正确的节点,则后继者是其祖先之一:第一个人的左子节点是节点或其祖先之一。只有当没有这样的祖先存在时,才有继承者。我个人会将一个迭代器返回给节点,否则代码似乎没问题。