加上一个“左”字;“叶”;在C语言中实现二叉树
我正在学习C语言,并试图建立一个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
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无法重现错误。您应该在调试器中运行该程序,以查看崩溃发生的确切位置,以及哪个取消引用的指针无效。