c - 二叉搜索树递归和 ma​​lloc

标签 c recursion malloc binary-search-tree

我在添加到我的二叉搜索树时遇到问题,我的程序似乎正在添加到一个临时结构中。我认为,为了使其正常工作,我必须在将变量节点设置为结构的一部分之前为左右节点调用 malloc。我只是不确定在代码中的哪个位置使用 malloc,所以它的其余部分仍然有效 =/

 typedef struct BiTree_ {
   BiTreeNode *root;
   int size;
} BiTree;

    typedef struct BitTreeData_ {
   char *str;
   int diff;
   int start_count;
   int end_count;
   int hidden;
} BiTreeData;

 typedef struct BiTreeNode_ {
    BiTreeData *data;
    struct BiTreeNode_ *right;
    struct BiTreeNode_ *left;
} BiTreeNode;

    int
bitree_insert(BiTree *tree, BiTreeNode *node, char *str)
{
    if(tree->root == NULL){
        tree->root = (BiTreeNode*)malloc(sizeof(BiTreeNode*));
        tree->root->data = (BiTreeData*)malloc(sizeof(BiTreeData*));
        tree->root->right = NULL;
        tree->root->left = NULL;
        tree->root->data->str = str;
        tree->root->data->hidden = 0;
        tree->root->data->start_count = 0;
        tree->root->data->end_count = 0;
        tree->root->data->diff = 0;
        tree->size++;
        return 0;
    }    
    if(node == NULL){
        node = (BiTreeNode*)malloc(sizeof(BiTreeNode));
        node->right = (BiTreeNode*)malloc(sizeof(BiTreeNode*));
        node->right = NULL;
        node->left = (BiTreeNode*)malloc(sizeof(BiTreeNode*));
        node->left = NULL;
        node->data = (BiTreeData*)malloc(sizeof(BiTreeData*));
        node->data->str = str;
        node->data->hidden = 0;
        node->data->start_count = 0;
        node->data->end_count = 0;
        node->data->diff = 0;
        tree->size++;
        return 0;
    }
    if(strcmp(str, node->data->str)<0){
        if(node->left == NULL){

            return 0;
        }
                bitree_insert(tree, node->left, str);
    }
    if(strcmp(str, node->data->str)>0){
        if(node->right == NULL){
            return 0;
        }
        bitree_insert(tree, node->right, str);
    }    
    return 0;
} 

最佳答案

您传递给函数 bitree_insert 的参数是按值传递的,而不是按引用传递的。因此,例如,node 是指向 BitTreeNode 类型变量的指针。如果您随后分配给 node,它会设置名为 node 的局部变量的值。看来您想要做的是传递对节点的引用,即 BitTreeNode **。这样,当您分配给 *node 时,该分配是针对从调用者传递的指针而不是局部变量。

关于c - 二叉搜索树递归和 ma​​lloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13102343/

相关文章:

java - 递归是如何工作的

c - 在C中的结构体中设置字节数组指针

c - 当我访问超出我分配的内存时,为什么我没有收到堆栈粉碎错误?

c++ - 为什么 new 不需要转换为指针,即使 malloc 需要它?

c - Eclipse下用已有的Makefile构建C语言STM32工程

c - 如何在c中管理csv文件?

c - 如果在注册窗口类时已经提供了 hInstance,为什么 CreateWindow() 将 hInstance 作为参数?

c - 由于 C 中错误的 malloc 导致程序崩溃

C - 按字典顺序的递归排列

javascript - 嵌套内容的递归 JavaScript 函数过早生成结束标记