C 트리 코드 질문이요

맨 아래 사진에 나오는 트리 구현하는데 다음과 같이 코드를 작성했습니다. 질문하고 싶은 부분이 main 함수에서 printInOrder 함수 호출했을때 printInOrder 안에서 root에서 l3까지는 어떻게 가서 출력되는지 이해가 되는데 l3에서 위에 l2, l1, root까지 조상 노드로 어떻게 연결되서 출력되는건지 잘 모르겠습니다..... #include <stdio.h> #include <stdlib.h> int leafnodeLevel = -1; // 리프 노드의 레벨 typedef struct treenode{ // 노드의 구조 int data; int nodeLevel; // 노드의 레벨 struct node* left; // 왼쪽 자식 노드 링크 struct node* right; // 오른쪽 자식 노드 링크 }node; node* createnode(int data) { // 노드를 생성하는 함수 node* newnode = (node*)malloc(sizeof(node)); newnode->left = newnode->right = NULL; newnode->data = data; newnode->nodeLevel = 0; return newnode; } void add(node* newnode, node* upper) { if(newnode->data > upper->data) { if(upper->left == NULL) { upper->left = newnode; newnode->nodeLevel = upper->nodeLevel + 1; } else add(newnode, upper->left); } else { if(upper->right == NULL) { upper->right = newnode; newnode->nodeLevel = upper->nodeLevel + 1; } else add(newnode, upper->right); } } // 중위 순회(왼쪽 자식 -> 부모 -> 오른쪽 자식) void printInOrder(node* root) { if(root->left != NULL) printInOrder(root->left); printf("%d ", root->data); if(root->right != NULL) printInOrder(root->right); } int main(void) { node* root = (node*)malloc(sizeof(node)); // 루트 노드 생성 leafnodeLevel += 1; // 리프 노드의 레벨 0 root->nodeLevel = leafnodeLevel; root->data = 400; node* l1 = createnode(500); add(l1, root); leafnodeLevel += 1; node* l2 = createnode(600); add(l2, root); leafnodeLevel += 1; node* l3 = createnode(700); add(l3, root); leafnodeLevel += 1; node* r1 = createnode(300); add(r1, root); node* r2 = createnode(200); add(r2, root); node* r3 = createnode(100); add(r3, root); printf("중위 순회 : "); printInOrder(root); // 중위 순회 printf("\n"); return 0; };

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2022년 11월 24일 오전 7:42

댓글 0