Sodaoo 2016-11-19 23:47 采纳率: 100%
浏览 960
已采纳

一个二叉树的建立,不知道哪里错了呢

 void create(BiTree *T) {
    char ch;
    scanf("%c",&ch);
    if(ch=='#')
        *T = NULL;
    else {
        *T = (BiTree)malloc(sizeof(BiNode));
        if(*T) {
            (*T)->data = ch;
            create(&(*T)->lchild);
            create(&(*T)->rchild);
        }
        else return ;
    }
}

上面是正确的代码
为什么不能用下面的这片???

void create(BiTree T) {
    char ch;
    scanf("%c",&ch);
    if(ch=='#')
        T = NULL;
    else {
        T = (BiTree)malloc(sizeof(BiNode));
        if(T) {
            T->data = ch;
            create(T->lchild);
            create(T->rchild);
        }
        else return ;
    }
} 
  • 写回答

8条回答 默认 最新

  • OPMR 2016-11-20 05:26
    关注

    之前的void create(BiTree T)这里,T是形式参数传进去的,在create的子函数里进行的操作,是对形式参数的操作,子函数结束时就都释放了,不会返回到主函数
    void create(BiTree *T)这里,用到了指针指向T的地址,相当于对T的地址的操作,是一直有效的
    也可以写成(BiTree *&T)下面都用T
    这里涉及C语言指针的相关知识

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大