我在理解这个问题时遇到了一些问题,所以我在这里问,我在这里只能得到很好的答案。
任务是:必须编写一个新函数(并计算)列出可以在树中输入多少元素而不必增加其高度。该函数仅输出并明确表示数值ex。 17 / N。
有人可以澄清吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX_TREE_STRING 100
#define MAX_NODES 100
// width and height of 2D array used for function print_tree
#define WIDTH 80
#define HEIGHT 10
typedef struct node {
int key;
struct node *left;
struct node *right;
}Node;
int print_tree(Node *tree, int is_left, int offset, int depth, char s[HEIGHT][WIDTH]) {
char b[HEIGHT];
int i, left, right, width = 3;
if (!tree) return 0;
sprintf(b,"(%c)",tree->key);
left = print_tree(tree->left,1,offset,depth+1,s);
right = print_tree(tree->right,0,offset+left+width,depth+1,s);
for (i=0; i<width; i++)
s[depth][offset+left+i] = b[i];
if (depth) {
if (is_left) {
for (i=0; i<width+right; i++)
s[depth-1][offset+left+width/2+i] = '-';
} else {
for (i=0; i<left+width; i++)
s[depth-1][offset-width/2+i] = '-';
}
s[depth-1][offset+left+width/2] = '.';
}
return left+width+right;
}
Node *create_tree(char *tree_string) {
Node *queue[MAX_NODES];
Node *trenutni, *parent;
int tail, head, i;
tail = head = -1;
trenutni = parent = NULL;
for(i=0; i<strlen(tree_string); i++) {
if (tree_string[i]!=';') {
if (tree_string[i]=='-') continue;
trenutni = (Node *)malloc(sizeof(Node));
trenutni->key = tree_string[i];
trenutni->left = trenutni->right = NULL;
queue[++tail] = trenutni;
if (parent && tree_string[i-1]==';') {
parent->left = trenutni;
} else if (i>0) {
parent->right = trenutni;
}
} else {
parent = queue[++head];
}
}
return queue[0];
}
/*
void function_name(arguments) {
}
*/
int main () {
Node *root=NULL;
int i, menu_choice;
char c, tree_string[MAX_TREE_STRING];
char print_format[6], empty_line[WIDTH], s[HEIGHT][WIDTH];
setbuf(stdout, NULL);
do {
menu_choice = 0;
//printf("\n1 Description of a function (function_name)");
printf("\n2 Create tree \n3 Print \n4 Exit\n");
scanf("%d", &menu_choice);
switch (menu_choice) {
case 1:
//function_name(arguments);
break;
case 2:
printf("Create a tree as queue of alphanumeric entries separated with ;\n");
scanf(" %s", tree_string);
root = create_tree(tree_string);
break;
case 3:
sprintf(print_format, "%%%ds", WIDTH-1);
for (i=0; i<HEIGHT; i++)
sprintf(s[i], print_format, " ");
print_tree(root,0,0,0,s);
sprintf(empty_line, print_format, " ");
for (i=0; i<HEIGHT; i++) {
if (strcmp(s[i],empty_line))
printf("%s\n", s[i]);
}
break;
case 4:
break;
default:
while((c = getchar()) != '\n' && c != EOF);
}
} while(menu_choice!=4);
return 0;
}
澄清:在将元素插入树之后,您必须找到树的最大高度,以及您可以将多少元素插入树的其他节点,最大的高度而不是越过它结束了。
答案 0 :(得分:2)
完整的二叉树包含2^h -1
个节点。因此,您可以在不更改树高度的情况下插入2^h-1 - n
个更多节点。 (其中n
是树中当前的节点数)。