【发布时间】:2014-07-20 19:20:57
【问题描述】:
我必须编写一个可以处理图书馆库存的二叉搜索树的实现。它读取包含所有书籍的文本文件,并按字母顺序将书籍添加到树中。我一直在与 DAYS 的 Insertar() 函数代码作斗争,但我无法使其正常工作,它基本上接收到与本书相关的所有数据的树根指针。如果根为 NULL,则它使用在函数中输入的所有值来初始化一个节点,并将内存方向指向该空节点。问题是,它在本地进行,最后它没有分配它。有人可以帮我纠正那个特定的功能吗?
函数和结构:
nodoArbol:节点
ArbolBin:二叉树,它有一个指向根节点的指针和一个带有元素数量的 int
InitNodo:初始化节点,返回指向节点的指针
Raiz:返回一个指向二叉树根的指针
Clear,Clear_Aux:清除一棵树
Ingresar:Insert() 函数和问题的根源
Imprimir:rints 节点的元素。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct nodoArbol {
char nombre[51],autor[51];
int valor,stock,anno;
struct nodoArbol *der;
struct nodoArbol *izq;
} tNodoArbol;
typedef struct {
tNodoArbol *root;
int n;
} ArbolBin;
tNodoArbol* InitNodo(char *nombre,char *autor, int stock, int valor, int anno){
tNodoArbol *p;
p= (tNodoArbol*)malloc(sizeof(tNodoArbol));
strcpy(p->nombre, nombre);
strcpy(p->autor, autor);
p->stock = stock;
p->anno = anno;
p->valor = valor;
p->izq = NULL;
p->der = NULL;
return p;
}
tNodoArbol* Raiz(ArbolBin p){
return (&p)-> root;
}
void Init(ArbolBin *p){
p->root = NULL;
p->n = 0;
}
void clear_aux(tNodoArbol *nodo){
if (nodo == NULL){
return;
}
clear_aux(nodo->izq);
clear_aux(nodo->der);
free((void *) nodo);
}
void Clear(ArbolBin *p){
clear_aux(p->root);
p->root = NULL;
p->n = 0;
}
void Insertar (tNodoArbol *nodo, char *nombre,char *autor, int stock, int valor, int anno){
if (nodo == NULL){
nodo = (InitNodo(nombre,autor,stock,valor,anno));
}
else{
int result;
result = strcmp(nodo->nombre,nombre);
if (result>0){
Insertar (nodo->der, nombre,autor,stock,valor,anno);
}
else if (result<0){
Insertar (nodo->izq, nombre,autor,stock,valor,anno);
}
}
}
void Imprimir(tNodoArbol *nodo){
printf("Nombre:%s \n",nodo->nombre);
printf("Autor:%s \n",nodo->autor);
printf("Stock:%d \n",nodo->stock);
printf("Valor:%d \n",nodo->valor);
printf("anno:%d \n",nodo->anno);
}
int main(){
char a[50]= "holi",b[50] ="asdasdasd";
ArbolBin Tree;
tNodoArbol *Root;
Init(&Tree);
Root = Raiz(Tree);
Insertar(Root,a,b,2,1000,2014);
Imprimir(Root);
return 0;
}
【问题讨论】:
标签: c binary-search-tree