2017-05-22 10 views
0

그래서 preorder tranversal을 사용하여 이진 트리에서 연결된 목록을 만들려고합니다. 나는 그것을 할 때 많은 문제를 겪고 있는데, 나는 "해결책"을 보았다. 그러나 나는 그것을 좋아하지 않았다! 나는 단순한 것을 시도하고있다.이진 트리에서 연결된 목록 만들기 (선주문 tranversal)

typedef struct nodo { 
    int value; 
    struct nodo *left, *right; 
} *ABin; 

typedef struct lligada { 
    int value; 
    struct lligada *next; 
} *LInt; 

void preorder (ABin a, LInt * l) { 

    LInt r=*l,tmp; 
    tmp=r; 

    if (!a) { 
    *l=NULL; 
} 
    else { 
    r=malloc(sizeof(struct lligada)); 
    r->value=a->value; 
    r=r->next; 
    *l=tmp; 
    preorder (a->left,l); 
    preorder (a->right,l); 
    } 
} 

난 항상 빈 목록을 받고 있어요 :

내가 지금까지 가지고 코드입니다!

답변

3

if (! a) {* l = NULL; }

이에 allways * 리터에 널 (null)로, 함수에서 수행 마지막 일 모든 방법을 위로 전달되는 것입니다.

나머지는 문제가있다 :

R = R -> 다음;

하지만 당신은 아무것도 r->next을 설정하지 않습니다. 먼저해야 할 것입니다.

처음으로 preorder()을 호출 할 때 무엇이 ​​있다면 무엇입니까? *l을 가리 킵니까? 아마도 LInt *를 전달하는 대신 Lint * (내부 호출 후 목록에 합류)를 반환하는 것이 더 편리 할 것입니다.

+0

오, 내 잘못! 당신 말이 맞아요. – Bruno

+0

처음에는 NULL을 가리켜 야합니다. – Bruno

+0

나는 사랑하고 싶지만 선언을 변경할 수는 없다. 그것은 선생님에 의해 시행되었습니다. – Bruno