2009-11-28 7 views
0

저는 C로 매우 초보자입니다.하지만, 저에게는 문제를 해결하는 프로그램이 필요합니다. 어떻게하면됩니까?C에서 나무 구조를 만드는 방법

나무 구조가 필요합니다. 이것은 모든 잎이 다양한 잎을 가질 수 있기 때문에 전통적인 나무가 아닙니다. 따라서 모든 리프에는 리프의 하위를 포함하는 연결된 목록이 있어야합니다. 모든 링크에는 char [] [] - 배열과 잎이 얼마나 좋은지 알려주는 int 변수가 있습니다. 그리고 나서 가장 좋은 char [] [] 배열을 찾고 그것을 출력하기위한 최선의 검색을해야합니다. 적절한 배열을 찾으면 트리를 멈출 수 있습니다.

+1

공부하기 힘들어, 더 열심히 노력하고 행복 할 때! – Dani

+0

afaik, leaf는 자식이없는 노드입니다. 따라서 "잎"은 잎이 아닐 경우 잎이 아닙니다. – Amarghosh

+0

(S) 그는 각 노드가 다양한 수의 자식을 가질 수 있음을 의미합니다. 흔히있는 것은 아닙니다. –

답변

2

나는 링크 된 목록을 삽입 시간에 정렬 된 상태로 유지하므로 항상 트리 노드의 첫 번째 목록 항목을 반환 할 수 있습니다. 실제보다 많은 요소가 정보 색인 그래서

struct listnode { 
    char** data; 
    int quality; 
    struct listnode* next; 
}; 

struct treenode { 
    struct treenode* left; 
    struct treenode* right; 
    int key; 
    struct listnode* list; 
}; 


struct treenode* tree_insert(struct treenode* root, int key, int quality, char** data) 
{ 
    if(root == NULL) { 
     root = treenode_alloc(); 
     root->key = key; 
     root->list = list_insert(root->list, quality, data); 
     return root; 
    } 

    if(key < root->key) { 
     root->left = tree_insert(root->left, key, quality, data); 
    } else if(key > root->key) { 
     root->right = tree_insert(root->right, key, quality, data); 
    } else { 
     //key == root->key 
     root->list = list_insert(root->list, quality, data); 
    } 
    return root; 
} 

struct listnode* list_insert(struct listnode* head, int quality, char** data) { 
    struct listnode* prev = NULL; 
    struct listnode* ins = NULL; 
    struct listnode* ptr = NULL; 
    if(head == NULL) { 
     head = listnode_alloc(); 
     head->quality = quality; 
     head->data = data; 
     return head; 
    } 
    ptr = head; 

    while(quality < ptr->quality) { 
     if(ptr->next == NULL) { //we reached end of list 
      ptr->next = list_insert(NULL, quality, data); 
      return head; 
     } 

     prev = ptr; 
     ptr = ptr->next; 
    } 

    //insertion into middle of list (before ptr, because ptr->quality >= quality) 
    ins = listnode_alloc(); 
    ins->quality = quality; 
    ins->data = data; 
    ins->next = ptr; 
    if(prev) { 
     prev->next = ins; 
    } 
    return head; 
} 
0

arrayindex의 라인을 따라

뭔가, arrayelement 데이터, 좋은 키워드 fordfulkersson, 화학에 대한 trie 데이터 모델, 고전적인 논리에 대한 B- 트리, 너비 우선 탐색 인 위치 정보입니다 , concordance dbs, heapstructure 또는 스택 (LIFO)

0

데이터 구조에 대한 연구 & 알고리즘 ... 위키 백과는 볼 수있는 좋은 장소입니다.

관련 문제