我正在尝试从元素向量创建一个AVL完美平衡的树。 我已经开始使用少量元素(8),以便检查算法的正确性。从TREE打印值时出现问题,我不断收到下一个异常
"Exception thrown: read access violation. nod->stanga was 0x4."
当我到达(root) - >(右) - > left-:value时,即使我在打印任何内容之前检查指针是否为空。 结构是:
typedef struct node
{ int key;
int size;
node *stanga;
node *dreapta;
}TreeNode;
数组: int vector [8] = {1,2,3,4,5,6,7,8}; 打印功能:
void printElements(TreeNode *nod)
{
if (nod != NULL)
{
printf("Nodul este : %d \n", nod->key);
if (nod->dreapta != NULL && nod->stanga != NULL)
{
printf("Nodul dreapta al nodului %d este : %d \n", nod->key, nod->dreapta->key);
printf("Nodul stamga al nodului este %d : %d\n ", nod->key, nod->stanga->key);
}
if (nod->dreapta != NULL)
{
printf("ramura dreapta a nodului %d cu valoare dreapta este : %d\n", nod->key,nod->dreapta->key);
printElements(nod->dreapta);
}
if (nod->stanga != NULL)
{
printf("ramura dreapta a nodului %d cu valoare stanga este : %d \n ",nod->key, nod->stanga->key);
printElements(nod->stanga);
}
}
else
{
printf("the end of the tree");
}
}
呼叫:
TreeNode *nod = (TreeNode*)malloc(sizeof(TreeNode));
nod=Build_tree(0, 7);
printElements(nod);
构建树是我的构建函数:
TreeNode* Build_tree(int start, int end)
{
if (start < end)
{
int medium = (start + end) / 2;
TreeNode *n1 = (TreeNode*)malloc(sizeof(TreeNode));
n1->key = vector[medium];
n1->size = 1;
if (n1->stanga == NULL)
{
n1->size = n1->dreapta->size + 1;//alocam sizeul nodului din drepata
}
if (n1->dreapta == NULL)
{
n1->size = n1->stanga->size + 1;//altefl alocam sizeul nodului din stanga
}
n1->stanga = Build_tree(start, medium-1);
n1->dreapta = Build_tree(medium+1,end);
return n1;
}
}
我使用指针和平衡树有点生疏。有人可以帮我一个线索吗?
答案 0 :(得分:0)
Build_tree中的if(start&lt; end)语句有一个else条件,你从函数中删除,因此返回一些未定义的东西。我插入了一个fprintf(stderr,“错误:无法到达此处(%d,%d)\ n”,开始,结束),并得到以下输出:
Error: cannot get here (0, 0)
Error: cannot get here (2, 2)
Error: cannot get here (4, 4)
Error: cannot get here (6, 5)
Error: cannot get here (7, 7)
Nodul este : 4
Nodul dreapta al nodului 4 este : 6
Nodul stamga al nodului este 4 : 2
ramura dreapta a nodului 4 cu valoare dreapta este : 6
Nodul este : 6
ramura dreapta a nodului 6 cu valoare dreapta este : 7
Nodul este : 7
ramura dreapta a nodului 4 cu valoare stanga este : 2
Nodul este : 2
现在,在另一方应该做些什么?