【发布时间】:2014-01-05 01:38:50
【问题描述】:
我在理解这个问题时遇到了一些问题,所以我会在这里问,我在这里只得到了很好的答案。
任务是:有必要编写一个新函数来(并计算)列出多少元素可以输入到树中而不必增加他的高度。该函数仅输出明确的数值 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;
}
澄清:将元素插入树后,您必须找到树的最大高度,以及可以将多少元素插入树的其他节点,直到最大高度并且不交叉结束了。
【问题讨论】:
-
您希望得到什么澄清?问题、算法还是代码?
标签: c algorithm binary-tree elements