我試圖創建一個函數path()
,它將返回一個節點指針數組與節點的路徑,當在樹中查找一個元素。我試圖用遞歸做,但不知道什麼是錯,函數路徑有一個簽名:Node *a
,二叉樹,int v
,找到的值,和int *p
一樣,作爲訪問節點的計數器。分段錯誤創建malloc數組的節點
這裏是我的代碼:
typedef struct nodo {
int v;
struct nodo *left, *right;
} Nodo;
Nodo **path(Nodo *a, int v, int *p) {
(*p)++;
Nodo **r = NULL;
if (a == NULL) {
return NULL;
}
if (a->v == v) {
r = (Nodo**)malloc((*p)*sizeof(Nodo*));
r[(*p)-1] = a;
return r;
}
else if (a->v < v) {
Nodo **r = path(a->right, v, p);
r[(*p)-1] = a;
return r;
}
else if (a->v > v) {
Nodo **r = path(a->left, v, p);
r[(*p)-1] = a;
return r;
}
return r;
}
在檢查「a == NULL」之前,您可能不應增加'(* p)++''。 –
哪一行會崩潰?運行它在調試器中找出 –
當代碼範圍'r [(* p)-1] = a'在'malloc'之後調用 – zolid