#include #include #include using namespace std; const int MAX_VALUE = 1000; class treenode { public: int value; treenode *left_child; treenode *right_child; treenode(int v): value(v) {} }; void print_levels(treenode *root) { // YOUR CODE GOES HERE } treenode *generate_child(double child_probability, int depth, int max_depth) { if (max_depth == depth) return 0; treenode *new_node = 0; int new_value = random() % MAX_VALUE; if ((new_value / (double)MAX_VALUE) < child_probability) { new_node = new treenode(random() % MAX_VALUE); new_node->left_child = generate_child(child_probability, depth+1, max_depth); new_node->right_child = generate_child(child_probability, depth+1, max_depth); } return new_node; } void *print_tree(treenode *root, string indent) { if (root == 0) { printf("%s----\n", indent.c_str()); } else { printf("%s%d\n", indent.c_str(), root->value); print_tree(root->left_child, indent + " "); print_tree(root->right_child, indent + " "); } } main(int argc, char **argv) { long seed; double child_probability; int max_depth; if (argc != 4) { fprintf(stderr, "usage: print_levels seed child_probability max_depth\n"); exit(1); } if (sscanf(argv[1], "%ld", &seed) != 1) { fprintf(stderr, "seed, %s, must be an integer\n", argv[1]); exit(1); } if (sscanf(argv[2], "%lf", &child_probability) != 1) { fprintf(stderr, "child probability, %s, must be a number between 0 and 1\n", argv[1]); exit(1); } else if ((child_probability <= 0) || (child_probability >= 1)) { fprintf(stderr, "child probability, %s, must be a number between 0 and 1\n", argv[1]); exit(1); } if (sscanf(argv[3], "%d", &max_depth) != 1) { fprintf(stderr, "max_depth, %s, must be an integer\n", argv[3]); exit(1); } srandom(seed); treenode *root = new treenode(random() % MAX_VALUE); root->left_child = generate_child(child_probability, 1, max_depth); root->right_child = generate_child(child_probability, 1, max_depth); print_tree(root, ""); print_levels(root); }