Saya memiliki dua fungsi yang melintasi pohon di preorder
dan postorder
, masing-masing memasukkan nilai dalam node ke dalam array, dan mengembalikan array.
Namun, fungsi postorder
saya tidak berfungsi. Saya mendapatkan kesalahan segmentasi saat fungsi tersebut dipanggil.
Ketika kode berikut dikompilasi dan dijalankan, tetapi setelah memanggil metode postorder
saya mendapatkan kesalahan segmentasi.
Ini kode saya:
int* preorder_recursive(node *root, int* dataArray)
{
if (root == NULL)
return dataArray;
for (int i = 0; i < 512; i++)
{
if (dataArray[i] == INT_MIN)
{
dataArray[i] = root->data;
printf("%d is being inserted to the preorder array at pos %d\n", root->data, i);
break;
}
}
preorder_recursive(root->left, dataArray);
preorder_recursive(root->right, dataArray);
}
int* postorder_recursive(node *root, int *dataArray)
{
if (root == NULL)
return dataArray;
postorder_recursive(root->left, dataArray);
postorder_recursive(root->right, dataArray);
for (int i = 0; i < 512; i++)
{
// any "empty" spots in the array should contain INT_MIN
if (dataArray[i] == INT_MIN)
{
dataArray[i] = root->data;
printf("%d is being inserted to the postorder array at pos %d\n", root->data, i);
break;
}
}
}
Saat menelepon:
int * complete_pre_b = preorder_recursive(b, pre_order_b);
for(int i = 0; i < 3; i++)
{
printf("pre b is %d\n", complete_pre_b[i]);
}
int * complete_post_b = postorder_recursive(b, post_order_b);
// here is the last print I see - code get till here fine
for(int i = 0; i < 3; i++)
{
printf("post b is %d\n", complete_post_b[i]);
}
(Perhatikan - Saya memiliki pohon dengan 3 simpul, itulah sebabnya saya mengulang i dari 0 hingga 3)
Apa masalahnya? Apa perbedaan antara postingan saya dan pre order?