我正在学习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;
}
我向它添加元素,如:
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);
}
}
}
这种方法通过检查值来“排序”树。但是我想要一个简单地将val值添加到左侧(左侧)而不进行任何排序的函数。我做了:
void InsertLeft(binary_tree *tree, int val) {
Insert(&(*tree)->left, val);
}
我这样称呼函数:
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)
函数来添加元素,但是在调用此函数时,它只会使程序崩溃。我不明白为什么。