2012-02-24 2 views
0

この私の私の後継funcを見つける:AVLが後継

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

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

答えて

0

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