【问题标题】:Adding additional elements in a binary tree without changing the height of a tree在二叉树中添加额外元素而不改变树的高度
【发布时间】: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


【解决方案1】:

完整的二叉树包含2^h -1 节点。因此,您可以在不改变树高度的情况下插入2^h-1 - n 更多节点。 (其中n 是树中的当前节点数)。

【讨论】:

    猜你喜欢
    • 2021-09-07
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多