【问题标题】:BST code stops working after deleting the int in main删除 main 中的 int 后,BST 代码停止工作
【发布时间】:2021-06-10 12:41:49
【问题描述】:

所以,我试图编写一个只插入的二叉树代码,它正在工作,但在我删除了一些无用的int 后,它由于某种原因停止工作。谁能告诉我为什么

所以,这是我的代码,它工作正常。但是当我删除int main 中的int i=3; 时,它停止工作。这是为什么?顺便说一句,int i=3; 只是一个随机数,如果我将其更改为其他数字,它仍然有效

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

struct Treenode{ 
    int data; 
    struct node*left; 
    struct node*right; 
}; 
typedef struct Treenode Treenode;


struct Treenode* CreateTree(struct Treenode** tree, int num) { 
 
    Treenode*temp = NULL;
    if(!(*tree))
    {
        temp = (Treenode*)malloc(sizeof(Treenode));
        temp->left = temp->right = NULL;
        temp->data = num;
        *tree = temp;
        return;
    }

    if(num < (*tree)->data){
        CreateTree(&(*tree)->left, num);
    }
    else if(num > (*tree)->data){
        CreateTree(&(*tree)->right, num);
    }
    
}

void inorder(struct Treenode* root)
{
    if (root != NULL) {
        inorder(root->left);
        printf("%d \n", root->data);
        inorder(root->right);
    }
}

int main(){
    int i = 3;
    //creating tree
    Treenode*root;
    
    
    CreateTree(&root, 1);
    CreateTree(&root, 2);
    CreateTree(&root, 3);
    CreateTree(&root, 4);
    CreateTree(&root, 5);
    CreateTree(&root, 6);

    inorder(root);
    

    return 0;
}

【问题讨论】:

  • CreateTree 声称返回一个值,但没有。

标签: c binary-tree binary-search-tree


【解决方案1】:

非静态局部变量Treenode *root;没有初始化,所以它的初始值是不确定的。使用这种不确定的值可能会带来一些麻烦。

像Treenode *root = NULL;这样初始化变量来解决这个问题。

还要注意malloc() family 的转换结果是considered as a bad practice。

【讨论】:

    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多