Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加上一个“左”字;“叶”;在C语言中实现二叉树_C_Tree_Binary Tree - Fatal编程技术网

加上一个“左”字;“叶”;在C语言中实现二叉树

加上一个“左”字;“叶”;在C语言中实现二叉树,c,tree,binary-tree,C,Tree,Binary Tree,我正在学习C语言,并试图建立一个C二叉树库。我的结构定义为: struct Node { int value; struct Node *left; struct Node *right; }; typedef struct Node TNode; typedef struct Node *binary_tree; 它是这样创建的: binary_tree NewBinaryTree(int value_root) { binary_tree newRoot

我正在学习C语言,并试图建立一个C二叉树库。我的结构定义为:

struct Node {
    int value;
    struct Node *left;
    struct Node *right;
};

typedef struct Node TNode;
typedef struct Node *binary_tree;
它是这样创建的:

binary_tree NewBinaryTree(int value_root) {
    binary_tree newRoot = malloc(sizeof(TNode));
    if (newRoot) {
        newRoot->value = value_root;
        newRoot->left = NULL;
        newRoot->right = NULL;
    }
    return newRoot;
}
InsertLeft(&tree, 8);
  tree = NewBinaryTree(3);
我添加了如下元素:

void Insert(binary_tree *tree, int val) {
    if (*tree == NULL) {
        *tree = (binary_tree)malloc(sizeof(TNode));
        (*tree)->value = val;
        (*tree)->left = NULL;
        (*tree)->right = NULL;
    } else {
        if (val < (*tree)->value) {
            Insert(&(*tree)->left, val);
        } else {
            Insert(&(*tree)->right, val);
        }
    }
}
我这样调用函数:

binary_tree NewBinaryTree(int value_root) {
    binary_tree newRoot = malloc(sizeof(TNode));
    if (newRoot) {
        newRoot->value = value_root;
        newRoot->left = NULL;
        newRoot->right = NULL;
    }
    return newRoot;
}
InsertLeft(&tree, 8);
  tree = NewBinaryTree(3);
我有一个初始化树的主程序,如下所示:

binary_tree NewBinaryTree(int value_root) {
    binary_tree newRoot = malloc(sizeof(TNode));
    if (newRoot) {
        newRoot->value = value_root;
        newRoot->left = NULL;
        newRoot->right = NULL;
    }
    return newRoot;
}
InsertLeft(&tree, 8);
  tree = NewBinaryTree(3);
还有一种树显示方法:

void display_binary_tree( binary_tree tree )
{
    if( tree != NULL )
    {
        display_binary_tree( tree->left ) ;
        printf( "%d " , tree->value ) ;
        display_binary_tree( tree->right ) ;
    }
}

然后我可以通过调用
Insert(binary_tree*tree,int val)
函数来添加元素,但是当调用这个函数时,它只是使程序崩溃。我不明白为什么。

在代码段中尽量避免使用母语。它失去了可读性。我喜欢法语。错误可能在调用这些函数的代码中。你能提供吗?至于
NouvelArbreVide
,我认为最好删除它并让
Ajouter
插入根,如果您将空树初始化为
NULL
,这是可能的。。。。换句话说,我们需要一个解决方案。gdb或valgrind将向您展示为什么crashI无法重现错误。您应该在调试器中运行该程序,以查看崩溃发生的确切位置,以及哪个取消引用的指针无效。