注册 登录
编程论坛 C语言论坛

二叉链表的创建

兔先生 发布于 2019-10-28 15:41, 3772 次点击
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    char data;
    struct  node* lchild;
    struct  node* rchild;
}bitbode, *bitree ;

void CreateBiTree(bitree* root);

int main()
{
    bitree lll=NULL;
    CreateBiTree(&lll);     

}

void CreateBiTree(bitree* root)
{
    char ch;
    ch = getchar();
    if (ch == '^') *root = NULL;
    else {
        *root = ( bitree)malloc(sizeof(bitree));//这里会在C处显示 触发断点(编译器:VS2019)
        (*root)->data = ch;            //报警:(6011)取消对NULL指针*root的引用     为什么这里会报警????
        CreateBiTree(&(*root)->lchild);
        CreateBiTree(&(*root)->rchild);
    }
}


[此贴子已经被作者于2019-10-28 22:49编辑过]

10 回复
#2
rjsp2019-10-28 16:07
乱七八糟的,看不懂,我猜你想要的是
程序代码:
#include <stdio.h>
#include <stdlib.h>

struct node
{
    char data;
    struct node* lchild;
    struct node* rchild;
};

void CreateBiTree( struct node** proot );

int main( void )
{
    struct node* root;
    CreateBiTree( &root );
}

void CreateBiTree( struct node** proot )
{
    char ch = getchar();

    if( ch == '^' )
    {
        (*proot) = NULL;
    }
    else
    {
        (*proot) = malloc( sizeof(struct node) );
        (*proot)->data = ch;
        CreateBiTree( &(*proot)->lchild );
        CreateBiTree( &(*proot)->rchild );
    }
}

#3
兔先生2019-10-28 21:49
回复 2楼 rjsp
有什么区别?除了typedef....而且你的malloc前面还缺少(struct node*)

[此贴子已经被作者于2019-10-28 22:16编辑过]

#4
bcbbcclbbc2019-10-28 22:50
回复 2楼 rjsp
void CreateBiTree( struct node** proot )

请问这个函数形参可以使用指针变量吗?
或是这个用 指向指针的指针变量 比较好?

   没有想到这点,指针变量做参数(传递的是指向的地址),因此函数结束后只会改变指向的地址上的值,而无法改变指针变量本身。
所以需要用双重指针,在原有的基础上建立分支。

[此贴子已经被作者于2019-10-31 03:05编辑过]

#5
rjsp2019-10-29 08:33
以下是引用兔先生在2019-10-28 21:49:35的发言:

而且你的malloc前面还缺少(struct node*)
你用的是 C语言,还好 C++语言?
如果是C++语言,你应该直接用 new;
如果是C语言,malloc前面就不应该加(struct node*)。不要因为加了强制转换后也能编译通过,就认为它是应该的。
#6
兔先生2019-10-29 11:36
回复 5楼 rjsp
明白了,大佬能不能说一下为什么会出现断点和报警?是写的主函数的问题还是这个例子程序本身就有问题?
#7
rjsp2019-10-29 12:13
以下是引用兔先生在2019-10-29 11:36:16的发言:

明白了,大佬能不能说一下为什么会出现断点和报警?是写的主函数的问题还是这个例子程序本身就有问题?
sizeof(bitree) 应该是 sizeof(struct node) 吧
而你说的那个警告,是VC提醒你malloc可能返回NULL
#8
兔先生2019-10-30 22:17
回复 7楼 rjsp
断点问题呢?在DEV环境下不会出现断点,但是在VS2019下却出现了断点,这是编译环境的问题还是代码严谨性的问题?

[此贴子已经被作者于2019-10-30 22:20编辑过]

#9
rjsp2019-10-30 22:26
回复 8楼 兔先生
我在7楼回答了
#10
兔先生2019-10-30 22:59
谢谢大佬
#11
WilsonLA2020-01-20 23:51
警告的话你应该给实参root判下空
1