私は次のようなことを提案します:
struct node {
int isRoot;
int val;
struct node * left;
struct node * right;
};
int printTree(node *root, int level){
int a = 0,b = 0;
if(level > 0){
if(root->left != NULL){
a = printTree(root->left, level-1);
}else{ a = 1; }
if(root->right !=NULL){
b = printTree(root->right, level-1);
}else{ b = 1: }
}else{
printf("%i", root->val);
return 0;
}
if(isRoot && !(a && b)){
printTree(root, level+1);
}
return a&&b;
}
int main(void){
//get your tree somehow and put the root into
//node *head with only the root node having isRoot as true;
printTree(head, 0);
}
ところで、これがコンパイルされるかどうかわからないので、疑似疑似コードと考えてください。
編集: それほど遅れないようにコードを更新しました。最初はレベル 0 ( root
)、次にレベル 1 ( root->left
、root->right
) というように、レベルごとに進みます。a
およびフラグはb
、ツリーの剪定 (NULL
ノード) がヒットしたことを示します。