在C中向二叉树添加左“叶”

时间:2016-12-07 13:44:04

标签: 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 = 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)函数来添加元素,但是在调用此函数时,它只会使程序崩溃。我不明白为什么。

0 个答案:

没有答案