0

これは私の後継機能です:

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()

インストラクターがランダムなデータで満たされたファイルをくれました。このすべてのデータをツリーに配置すると、挿入メソッドが機能しますが、削除メソッドが開始されると、ある時点で後続関数が後続を探しているノードと同じ値を返します。これは正しく起こるべきではありませんか?私の後継関数は正しいですか?削除方法を見たい場合は、それを言及してください。

4

1 に答える 1

0

後継者の定義にはすでに欠陥があります。ノードに正しいノードがない場合、後継者はその祖先の1つです。左の子がノードまたはその祖先の1つである最初のものです。そのような先祖が存在しない場合にのみ、後継者が存在します。個人的にはノードにイテレータを返しますが、そうでなければコードは問題ないようです。

于 2012-02-24T22:10:14.103 に答える