2012-02-24 1 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

후계자에 대한 정의는 이미 결함이 있습니다. 노드에 오른쪽 노드가없는 경우 후속 노드는 해당 조상 중 하나입니다. 첫 번째 노드는 왼쪽 노드가 노드이거나 조상 중 하나입니다. 그러한 조상이없는 경우에만 후계자가 있습니다. 개인적으로 노드에 반복자를 반환 하겠지만 그렇지 않으면 코드가 정상적으로 처리됩니다.

관련 문제