#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct area {
char name[20];
int population;
struct area *left;
struct area *right;
};
void printTree(int indent, struct area *s);
struct area *addarea(struct area *ar, char *str, int num);
int main() {
struct area a1 = {"A", 250000, NULL, NULL},
a2 = {"B", 190000, NULL, NULL},
a3 = {"C", 400000, NULL, NULL},
a4 = {"D", 170000, NULL, NULL},
a5 = {"E", 240000, NULL, NULL},
a6 = {"F", 430000, NULL, NULL};
struct area *root = NULL;
root = &a1;
a1.left = &a2;
a1.right = &a3;
a2.left = &a4;
a2.right = &a5;
a3.right = &a6;
char str[20];
int num;
printf("input a area name and its population : ");
scanf("%s %d", str, &num);
root = addarea(root, str, num);
printTree(0, root);
printf("\n");
return 0;
}
void printTree(int indent, struct area *ar) {
int i;
if (ar == NULL)
printf("NULL");
else {
printf("\n");
for (i = 0; i < indent; i++) printf(" ");
printf("(%-10s: population = %6d) ", ar->name, ar->population);
printCitiesTree(indent + 5, ct->left);
printf(", ");
printCitiesTree(indent + 5, ct->right);
printf(") ");
}
}
struct area *addarea(struct area *ar, char *str, int num) {
if (ar->population > num) {
if (ar->left == NULL) {
ar->left = malloc(sizeof(struct area));
strcpy(ar->left->name, str);
ar->left->population = num;
return ar;
} else {
addarea(ar->left, str, num);
}
} else {
if (ar->right == NULL) {
ar->right = malloc(sizeof(struct area));
strcpy(ar->right->name, str);
ar->right->population = num;
return ar;
} else {
addarea(ar->right, str, num);
}
}
}
プログラムを実行すると、
input a area name and its population : G 40000
(D : population = 170000)
(G : population = 40000) NULL, NULL) , NULL)
このように二分木の一部しか出力されません。
どのようにしたら二分木の全体を出力できるでしょうか。