这是一个非常简单的函数来建立二叉树。
我用它打印
“作为第一个添加,作为第一个添加,作为第一个添加,作为第一个添加,作为第一个添加,
作为第一个添加,作为第一个添加,作为第一个添加,作为第一个添加,作为第一个添加,“。
这意味着Build_tree(first_TR, A);
。为什么?我也试过first_TR == 0
不起作用:(
typedef struct SElementBST {
struct SElementBST *left, *right; /* wskaźnik na kolejny element listy */
unsigned slowo[DlugoscSlow+1]; /* przechowywana wartość */
} TBST;
TBST *first_TR = 0;
void Build_tree(TBST *first, unsigned char array[IloscSlow][DlugoscSlow+1])
{
int i,k,m;
TBST *tmp, *parent;
for(i=0;i<IloscSlow;i++)
{
if(!first_TR)
{
first = (TBST*) malloc(sizeof(TBST));
first -> left = 0;
first -> right = 0;
printf("added as first, ");
for(k=0;k<DlugoscSlow+1;k++)
first -> slowo[k] = array[i][k];
}
else
{
tmp = first;
while(tmp != 0)
{
k = 0;
parent = tmp;
while ((tmp->slowo[k] == array[i][k]) && (k<DlugoscSlow-1))
k++;
if(tmp->slowo[k] < array[i][k]) tmp = tmp -> right;
else tmp = tmp -> left;
}
tmp = (TBST*) malloc(sizeof(TBST));
tmp -> left = 0;
tmp -> right = 0;
for(m=0;m<DlugoscSlow+1;m++)
tmp-> slowo[m] = array[i][m];
if(parent->slowo[k] < array[i][k]) parent -> right = tmp;
else parent -> left = tmp;
}
}
}
最佳答案
如果你有这个:
void something(type *p) {
p = somethingelse;
}
int main() {
type *a = ...;
something(a);
}
函数
something
中的赋值不会更改调用方(a
此处)中main
的值。指针是按值传递的,这意味着指针值的副本被赋予函数something
。如果希望能够更改调用方中
a
指向的内容,则需要将指针传递给指针。void something(type **p) {
*p = somethingelse;
}
int main() {
type *a;
something(&a);
}
你不能在代码中的任何地方更改
first_TR
。所以它一直保持空值。或者你不需要第一个,你的代码应该是:
if(!first)
{
first = malloc(sizeof(TBST));
...
}
或者你确实需要它,你可以:
if(!first_TR)
{
first = malloc(sizeof(TBST));
...
first_TR = first;
}
(您不需要在
malloc
中投射C
的结果)关于c - 链接列表...不变,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5522504/