C - 二叉树:无法返回正确数量的修剪节点



我需要修剪超过某个级别的二叉树,l,并且需要返回修剪的节点数。

这是我得到的:

#include "abin.h"
int freeAB (ABin a) {
    int count = 0;
    if(a == NULL) return count;
    count = count + freeAB(a->esq);
    count = count + freeAB(a->dir);
    free(a);
    count++;
    return count;
}

int pruneAB (ABin *a, int l) {
    int count = 0;
    if(l == 0){
        count = count + freeAB((*a)->esq);
        count = count + freeAB((*a)->dir);
        (*a) = NULL;
    }
    else{
        count = count + pruneAB(&((*a)->esq), l-1);
        count = count + pruneAB(&((*a)->dir), l-1);
    }
    return count;
 }

阿宾。H:

#include <stdio.h>
#include <stdlib.h>
typedef struct lligada {
    int valor;
    struct lligada *prox;
} *LInt;
typedef struct nodo {
    int valor;
    struct nodo *esq, *dir;
} *ABin;
int pruneAB (ABin *a, int l);     

这是我应该得到的和我得到的输出:

Input: (depth=2)
               8
       4              12
   2       6      10      14
 1   3   5   7   9  11  13  15
Output:
[expected] res=12
   8
 4  12
[obtained] res=8
   8
 4  12
0/10 correct answers

有趣的是,如果我创建类似int r = 0的东西;并执行r++;每次if(l == 0)语句为真,然后执行打印语句,它会打印r4次。

如果我在最终计数中加上 4,我会得到正确答案。我假设我应该加上 if(l == 0) 为真的次数。

(我做不到。如果我确实计数++,我会得到分割错误)

你会怎么做?谢谢。

https://codeboard.io/projects/16275

int pruneAB (ABin *a, int l) {
    int count = 0;
    if (!*a) return 0;
    if (l < 0) return count;
    if(l == 0){
        count = freeAB(*a);
        (*a) = NULL;
    }
    else{
        count = count + pruneAB(&((*a)->esq), l-1);
        count = count + pruneAB(&((*a)->dir), l-1);
    }
    return count;
}

相关内容

  • 没有找到相关文章

最新更新