2013-05-06 6 views
0

이진 트리가 있습니다.이진 트리에서 각 노드의 정보 부분을 변경하십시오.

  2 
    / \ 
     3  4 
    /\  \ 
    5 1  8 
    \  /
    6  9 

나는

5, 6, 3, 1, 2, 4, 9, 8 

5+6,6+3,3+1,1+2,2+4,4+9,9+8,8+0 

11, 9, 4, 3, 6, 13, 17, 8 

로 변경됩니다 통과 중위 등 그

nodeinfo = nodeinfo + nextInorderNodeInfo 

때문에 실제 각 노드의 정보 일부를 변경하려면 내가 wi 함수를 작성할 필요가있다. 각 노드의 이진 트리 정보 부분을 수정합니다.

나는 오른쪽 리프 노드 인 노드를 수정할 수 없습니다 나는이 방법으로 호출

다음

change(root,NULL); 

함수 정의

void change(node* n, node *k) 
{ 
if (n) 
    { 
    if (n->left) change(n->left,n); 
    if (n->right) change(n,n->right); 
    n->info + = k->info; 
    } 
} 

을 수행했다.

누군가가 올바른 해결책을 줄 수 있습니까 .. ???

(right, this, left보다는 left, this, right 같이)

답변

1

의 주문 탐색 기능을 쓰기 미리 감사 (단지 다른 정의와에 순서 기술적으로 아직이다,하지만 그 점 외에입니다) .

그래서이 기능이 순서대로 노드를 처리합니다 :

8, 9, 4, 2, 1, 3, 6, 5 

이 기능은 (당신이 그것을 추가하기 전에) 또한 마지막으로 처리 된 노드의 값을 기억하고 단순히 현재의 노드에이 값을 추가해야합니다. 여기

그리고 심지어 일부 코드의 어떤 해야 일 : 당신의 도움에 대한

int last = 0; 
void change(node* n) 
{ 
    if (n) 
    { 
    change(n->right); 
    int tempLast = n->info; 
    n->info += last; 
    last = tempLast; 
    change(n->left); 
    } 
} 
+0

덕분에 .. – codeofnode

관련 문제