나는 C에서 나무 정렬을 실현해야하지만, 가능한 한 많이 고전적인 알고리즘을 따르는에도 불구하고 작동하게 만들 수 없습니다. 여기 내 코드입니다 :트리 정렬 내 정렬을 정렬하지
searchTreeSort.h :
#ifndef UTILS_H
#define UTILS_H
#include "utils.h"
#endif
//Déclaration d'une structure représentant un noeud d'arbre
struct _node;
typedef struct _node NODE;
typedef NODE *TREE;
TREE newNode(int item);
TREE insert(TREE node, int key);
void storeInOrder(TREE root, ARRAY t, int i);
void freeAllNodes(TREE root);
void displayNodes(TREE root);
void searchTreeSort(ARRAY t, int max);
utils.h에서searchTreeSort.c :
#include "searchTreeSort.h"
struct _node{
int value;
TREE left;
TREE right;
};
TREE newNode(int item){
TREE t = malloc(sizeof(NODE));
t->value = item;
t->left = NULL;
t->right = NULL;
return t;
}
TREE insert(TREE root, int item){
if(root == NULL)
return newNode(item);
if(item < root->value){
root->left = insert(root->left, item);
}
else if(item > root->value){
root->right = insert(root->right, item);
}
return root;
}
void storeInOrder(TREE root, ARRAY t, int i){
if(root != NULL){
storeInOrder(root->left, t, i);
t[i++] = root->value;
storeInOrder(root->right, t, i);
}
}
void freeAllNodes(TREE root){
if(root != NULL){
freeAllNodes(root->left);
freeAllNodes(root->right);
free(root);
}
}
void displayNodes(TREE root){
if(root != NULL){
displayNodes(root->left);
displayNodes(root->right);
printf("%d\n", root->value);
}
}
void searchTreeSort(ARRAY t, int max){
TREE root = NULL;
root = insert(root, t[0]);
for(int i = 1; i < max; i++){
insert(root, t[i]);
}
int i = 0;
storeInOrder(root, t, i);
//displayNodes(root);
freeAllNodes(root);
}
, 나는 다음과 같은 타입 정의를 가지고 : typedef int ARRAY [MAX]; 및 상기 MAX 값의 정의.
주에서는 ARRAY t를 임의의 값으로 채운 다음이 함수를 다음과 같이 호출합니다. searchTreeSort (t, max);
정렬 전후에 내 ARRAY를 표시 할 때를 제외하고는 아무 것도 변경되지 않았습니다. 요소는 동일한 순서로있었습니다.
displayAllNodes 함수는 Tree가 올바르게 생성되었다는 것을 보여주었습니다. 올바른 순서로 요소를 배열에 다시 저장하는 마지막 단계입니다.
이미 스레드와 같은 해결책을 보았습니다. C binary tree sort - extending it 하지만 typedef int ARRAY [MAX];를 사용해야합니다. 그런 포인터를 사용하는 동안 더 많은 포인터 집중적 인 솔루션을 구현하는 방법을 모릅니다.
어디에서 문제가 발생했는지 확인할 수 있도록 도와 주시겠습니까? 미리 감사드립니다.
선언을 변경 헤더 파일에서이
과 같이 호출. 나는 포인터로 작업해야 할 때 항상 물건을 엉망으로 만든다. 고마워. – Meleadeles