ダイナミックツリーなんだから、最初の一つのポインターを除けば、
全部、malloc で獲得した領域。

だから、開放したことを示すNULLを入れたポインターも、最初のを除けば、
最終的には開放されてしまう。

もしくは、NULLを入れようとするポインターがfreeで開放された領域になってしまう。

なんで最後に、
head = NULL;
printf( "NULL\n" );
とするしかない。