c - C 中的二叉树

标签 c binary-tree

我试图按顺序将节点插入到树中。我的函数工作正常...当只有三个节点时。

我有这个代码:

typedef struct _Tnode Tnode;
struct _Tnode {
    char* data;
    Tnode* left;
    Tnode* right;
};

伴随着这个:

Tnode* add_tnode(Tnode* current_node, char* value) {
Tnode* ret_value; 

if(current_node == NULL) {
    current_node = (Tnode*) malloc(sizeof(Tnode));

    if(current_node != NULL) {
      (current_node)->data = value;
      (current_node)->left = NULL;
      (current_node)->right = NULL;
      ret_value = current_node; }
    else 
        printf("no memory");    
}
else {
    if(strcmp(current_node->data,value)) {  //left for less than 

        ret_value = add_tnode((current_node->left), value);
        current_node -> left = (Tnode*) malloc(sizeof(Tnode));
        (current_node -> left) -> data = value;
    }

    else if(strcmp(current_node->data,value) > 0) {

        ret_value = add_tnode((current_node -> right), value);
        current_node -> right = (Tnode*) malloc(sizeof(Tnode));
        (current_node -> right) -> data = value;
    }

    else {
        printf("duplicate\n");
        ret_value = current_node;
    }
}

return ret_value;

我知道这里出了什么问题,只是不知道如何解决。这只会覆盖附加到根节点的两个节点。即

         |root_node|
        /           \
|node_2|             |node_3|

我无法添加节点四。它只是根据输入覆盖节点 2 或 3。在调试和一些研究之后,我不太确定从这里去哪里......

如果有人能提供帮助,我将不胜感激。

最佳答案

您应该只在插入到达叶节点(即 NULL)的情况下保留 mallocing。在其他情况下,您应该做的就是根据您的比较遍历到下一个级别。在你的例子中,你正在穿越到下一个级别,然后用一个新的 malloc 杀死它。因此,您永远无法通过第一级。

例如。

if (current_node == NULL) // Do initialization stuff and return current_node

if (strcmp(current_node->data, value) < 0) {
    current_node->left = add_tnode((current_node->left), value);
} else if (strcmp(current_node->data, value) > 0) {
    current_node->right = add_tnode((current_node->right), value);
}

return current_node;

关于c - C 中的二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/580520/

相关文章:

c - 二叉树递归函数

c++ - 在 cpp 中返回一对时出错

c - C 中打印所有 32 位数字序列的函数

c - 奇怪的 C 字符串输出

c - __func 函数的约定是什么?

c - 如何加速指针取消引用?

c - C中双下划线的使用

tree - 如何获取从根到二叉树上给定节点的路径?

python - 使用 dfs 遍历二叉树,在给定点停止(在 Python 中)

c - 无法找出二叉树的高度