c - 二叉树:关于生成二叉树的函数的问题

查看:196
本文介绍了c - 二叉树:关于生成二叉树的函数的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

代码1:

typedef struct Node{
    char data;
    struct Node * LChild;
    struct Node * RChild;
}BiTNode,*BiTree;
//
void CreateBiTree(BiTree * bt){
    char ch;
    ch=getchar();
    if(ch=='.'){
        *bt=NULL;
    }
    else{
        *bt=(BiTree)malloc(sizeof(BiTNode));
        (*bt)->data=ch;
        CreateBiTree(&(*bt)->LChild);
        CreateBiTree(&(*bt)->RChild);
    }
}

void main(){
        BiTree b;
        CreateBiTree(BiTree &b)
}

代码2:

typedef struct Node{
    char data;
    struct Node * LChild;
    struct Node * RChild;
}BiTNode,*BiTree;
//
void CreateBiTree(BiTree  bt){
    char ch;
    ch=getchar();
    if(ch=='.'){
        bt=NULL;
    }
    else{
        bt=(BiTree)malloc(sizeof(BiTNode));
        bt->data=ch;
        CreateBiTree(bt->LChild);
        CreateBiTree(bt->RChild);
    }
}

void main(){
    BiTree b;
    CreateBiTree(BiTree b)
}

问题:1.代码一是正确的操作,请问代码二错在哪了?(通过代码二创建的二叉树,若调用遍历函数会直接出错,调试时发现代码二创建的树的data,LChild,RChild内存中是未知数据)

2.&(*bt)是否等价于bt? 为什么?按我的理解&和*相遇应该可以抵消吧..

解决方案

注意函数在传参的时候一律是复制的,指针传入的时候,复制的是指针变量,形参和实参的指针变量是两个不同的变量,只是指向同一块区域而已。CreateBiTree明显是在函数内申请内存,并赋值给形参,那么形参指针必然要升一级,否则在函数内申请的内存是由函数的形参指向的,实参并没有发生变化,而且导致内存泄漏。

这篇关于c - 二叉树:关于生成二叉树的函数的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆