【问题标题】:Compilation Error in Construction of Binary Search tree二叉搜索树构造中的编译错误
【发布时间】:2013-10-26 03:57:44
【问题描述】:

我正在构建一个二叉搜索树。代码如下:

#include<stdio.h>
#include<stdlib.h>


struct tree_node
{
    int val;
    struct tree_node *left;
    struct tree_node *right;
};
void insert(struct tree_node **, int);
int main(void)
{
    struct tree_node *tree;

    tree = NULL;
    insert(&tree, 10);
    insert(&tree, 20);
    insert(&tree, 5);
    insert(&tree, 7);

    return 0;   
}

void insert(struct tree_node **tree1, int value)
{
    struct tree_node *temp, *start, *tem;
    tem = NULL;
    temp = (struct tree_node *)malloc(sizeof(struct tree_node) );
    start = *tree1;

    temp->val = value;
    temp->left = NULL;
    temp->right = NULL;

    if(*tree1 == NULL)
        *tree1 = temp;
    else
    {
        while(*tree1 != NULL )
        {
            if(value <= (*tree1)->val)
            {
                *tem = *tree1;
                *tree1 = (*tree1)->left;
            }
            else
            {
                tem = *tree1;
                *tree1 = (*tree1)->right;   
            }

        }
        if((tem->left) ==  *tree1)
            tem->left = temp;
        else
            tem->right = temp;
    }
    *tree1 = start;
}

我收到编译错误:

prog.c:44:5: error: invalid operands to binary * (have ‘struct tree_node *’ and ‘struct tree_node **’)

为什么?

【问题讨论】:

  • 你应该 #include &lt;stdlib.h&gt;malloc(),而不是 #includeing &lt;stdio.h&gt; 两次,顺便说一句。当我们讨论这个主题时,你应该写temp = malloc(sizeof(*temp));

标签: c pointers data-structures linked-list


【解决方案1】:

if(value &lt;= (*tree1)-&gt;val)内,

*tem = *tree1;

应该是:

tem = *tree1;

else 分支中的版本正确。

【讨论】:

  • 嘿,我如何打印根值。我正在做 printf("%d", tree->val );在 main() 但得到 RUN TIME ERROR。
  • @Naman - 这是正确的。 temp->value 将与该语句一起打印。
  • @Yu Hao - 我发布了我的,你的已经发布了。确认总是一件好事:)
  • @ryyker 我正在写它。抱歉,它是树-> val。为什么运行时间错误。
  • 其实我也不知道怎么用调试器调试程序
【解决方案2】:

这里:

void insert(struct tree_node **tree1, int value)

tree是一个指向指针的指针,而
tem 是一个指针
所以声明:

*tem = *tree1;

应该是:

tem = *tree1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多