用c语言求树的高度(数据结构)

2024-12-10 01:44:40
推荐回答(1个)
回答1:

#include
#include
typedef struct node
{
    int data;
    struct node *next;
}Link;

void insertNode(Link *head, int data) {
    Link *p = head;
    Link *q = (Link *)malloc(sizeof(Link));
    q->data = data;
    q->next = NULL;
    while(p->next != NULL) p=p->next;
    p->next = q;
}
void freeNode(Link *head) {
    Link *p = head->next;
    Link *q;
    head->next = NULL;
    while(p != NULL){
        q = p;
        p=p->next;
        free(q);
    }
}

int deep(Link ** tree, int start) {
    int depth = 1;
    Link *p;
    if(tree[start]->next == NULL) {
        return depth;
    }
    p= tree[start]->next;
    while(p!= NULL){
        int tmp = deep(tree, p->data - 1);
        if(tmp > depth) depth = tmp;
        p=p->next;
    }

    return depth + 1;
}

int main(){
    int count, i;
    int a, b;
    Link **tree;
    
    scanf("%d", &count);
    tree = (Link **)malloc(sizeof(Link*)*count);
    for(i=0;i        tree[i] = (Link *)malloc(sizeof(Link));
        tree[i]->next = NULL;
    }
    while((scanf("%d%d",&a, &b))!=EOF){
        if(a>0 && b>0) {
            insertNode(tree[a-1], b);
        }
    }
    printf("%d\n", deep(tree, 0));
    for(i=0;i        freeNode(tree[i]);
        free(tree[i]);
    }
    free(tree);
    return 0;
}