次のようなバイナリ ツリーを出力する必要があります。
--------x-------
----x-------x---
--x---x---x---x-
-x-x-x-x-x-x-x-x
xxxxxxxxxxxxxxxx
再帰を使用して、最初の行を除いて、行の左側と行の右側を印刷します。したがって、この関数は、左側の開始点と右側の終了点のパラメーターを使用して表示関数を呼び出します。次に、左側と右側の 2 回、自分自身を呼び出します。
#include <stdio.h>
#define LENGTH 16
void makeBranches(int, int);
void display(int, int);
int main(){
makeBranches(0, LENGTH-1);
}
void makeBranches(int left, int right){
if(left >= right){
return;
} else{
display(left, right);
makeBranches(left, (right+left)/2);
makeBranches((right+left)/2+1, right);
}
}
void display(int left, int right){
int mid = (left+right)/2;
int i;
for(i = left; i <= right; i++){
if(i == mid)
printf("X");
else
printf("-");
}
if(right == LENGTH-1)
printf("\n");
}
何度も変更されていますが、これが現在のコードの外観です。
makeBranches execute の最初の呼び出しを取得してから 2 番目の呼び出しを取得する方法がわかりません。現在、左側の呼び出しのみを行い、次のようになっています。
-------X--------
---X-----X--X-