首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

这个程序怎么异常?怎么处理

2012-10-19 
这个程序如何错误?怎么办?#include stdio.h#include malloc.htypedef struct btnode{int datastruct

这个程序如何错误?怎么办?
#include <stdio.h>
#include <malloc.h>
typedef struct btnode
{
int data;
struct btnode *lchild,*rchild;
}BTONDE;

void createbintree(BTONDE *t)
{
int data;
scanf("%d",&data);
if(data==0)
{
t=NULL;
}
else
{
t=(BTONDE *)malloc(sizeof(BTONDE));
t->data=data;
createbintree(t->lchild);
createbintree(t->rchild);
}
}


void prerodrdet(BTONDE *t)
{
if(t)
{
printf("%d",t->data);
prerodrdet(t->lchild);
prerodrdet(t->rchild);
}

}


int main(void)
{
BTONDE t1;
BTONDE *t=&t1;
createbintree(t);
printf("the is\n");
prerodrdet(t);


return 0;
}

[解决办法]
使用引用改变实参,或者返回节点指针

C/C++ code
#include <stdio.h>#include <malloc.h>typedef struct btnode{    int data;    struct btnode *lchild,*rchild;}BTONDE;void createbintree(BTONDE *&t)     //如果是用C++的话,就用引用,函数返回是可以改变实参{    int data;    scanf("%d",&data);    if(data==0)    {        t=NULL;    }    else    {        t=(BTONDE *)malloc(sizeof(BTONDE));        t->data=data;        createbintree(t->lchild);        //否则t->lchild是不会复制为NULL的        createbintree(t->rchild);    }}BTONDE * createbintree()                //如果用C语言的话{    int data;    scanf("%d",&data);    BTONDE * t;    if(data==0)    {        t=NULL;    }    else    {        t=(BTONDE *)malloc(sizeof(BTONDE));        t->data=data;        t->lchild = createbintree();        t->rchild = createbintree();    }    return t;}void prerodrdet(BTONDE *t){    if(t)    {        printf("%d",t->data);        prerodrdet(t->lchild);        prerodrdet(t->rchild);    }}int main(void){    //BTONDE t1;          //不必要    //BTONDE *t=&t1;    BTONDE *t;    //createbintree(t); //     C++可以这样调用    t = createbintree();    printf("the is\n");    prerodrdet(t);    return 0;}
[解决办法]
C/C++ code
#include <stdio.h>#include<stdlib.h>#define Ok 1#define  Error 0typedef int Status;typedef  int  TElemType ;typedef struct BiTNode{    TElemType  data;    struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;BiTNode *CreatBiTree(BiTree &t){    char ch;    ch=getchar();    getchar();    if(ch==' ') t=NULL;    else{        t=(BiTNode*)malloc(sizeof(BiTNode));        if(!t)  exit(1);        t->data=ch;        printf("请输入%c的左节点",t->data);        t->lchild=CreatBiTree(t->lchild);        printf("请输入%c的右节点",t->data);        t->rchild=CreatBiTree(t->rchild);        }    return t;}Status printelement(TElemType e){    printf("%c",e);    return Ok;}Status PreOrderTraverse(BiTree t,Status (*visit)(TElemType e)){    if(t)    {        if(visit(t->data))            if(PreOrderTraverse(t->lchild,visit))                if(PreOrderTraverse(t->rchild,visit) )   return Ok;       return Error;    }    else  return Ok;}void main(){    BiTree   tree;    CreatBiTree(tree);    PreOrderTraverse(tree,printelement);    getchar();    getchar();} 

热点排行