在BST最大的叶子的途中元素的总和

时间:2017-05-14 17:31:31

标签: c binary-search-tree

我正在尝试将路径中的所有节点汇总到二叉搜索树中的最大叶子。节点只包含正数。

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>

typedef int ElType;

typedef struct Tree {
    ElType key;
    struct Tree *left;
    struct Tree *right;
} Tree;

Tree* InsertBST(Tree* t, int k)
{
    if (t == NULL) {
        Tree* w = (Tree*) malloc(sizeof(Tree));
        w->key = k;
        w->left = NULL;
        w->right = NULL;
        return w;
    }

    if (k <= t->key)
        t->left = InsertBST(t->left, k);
    else
        t->right = InsertBST(t->right, k);

    return t;
}

int SumMaxOfBST(Tree* t, int *sum_max)
{
    if (t == NULL) {
        *sum_max = -1;
        return *sum_max;
    }

    if (t->right == NULL) {
        *sum_max += t->key;
        return *sum_max;
    }

    *sum_max += t->key;

    *sum_max += SumMaxOfBST(t->right, sum_max);
    return *sum_max;
}

int main()
{
    int i;
    srand (time(NULL));

    Tree* t = NULL;
    for (i = 0; i < 20; i++)
        t = InsertBST(t, rand() % 1000);

    int sum_way = 0;
    int a = SumMaxOfBST(t, sum_way);

      printf("Sum on the way to the largest leaf %d:\n", a);

    return 0;
}

退出时为非零状态。我的强烈怀疑是我使用了指针,然而,在使用指针进行了几次重写和视频之后,我似乎仍然没有理解正在发生的事情。如果我理解正确,*sum_max += x应将sum_max的值增加x。在哪一点上我使用了指针?

1 个答案:

答案 0 :(得分:2)

我不明白为什么你把一个指向int的指针作为SumMaxOfBST的参数,我认为这样写的函数更简单。

int SumMaxOfBST(Tree* t)
{
    if (t == NULL) {
        return 0;
    }
    if (t->right == NULL) {
        return t->key;
    }
    return t->+key + SumMaxOfBST(t->right);
}

此外,在您的main中,您传递的sum_wayint,而SumMaxOfBST则需要int*。您应该改为&sum_way