读书人

该程序通过编译却无法正确运行求路

发布时间: 2012-05-28 17:59:33 作者: rapoo

该程序通过编译,却无法正确运行,求路过的高手帮忙改正一下,也许就是一些小问题而已,非常感谢!
#include "stdio.h"
#include "malloc.h"
#define ok 1
typedef char ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode;
BiTNode *CreateTree(BiTNode *p)
{
char ch;
scanf("%c",&ch);
fflush(stdin);
if(ch=='#') {p=NULL;return 0;}
else
{
p=(BiTNode *)malloc(sizeof(BiTNode));
p->lchild=CreateTree(p->lchild);
p->rchild=CreateTree(p->rchild);
p->data=ch;

}
}
void *Display( BiTNode *p)
{
if(p!=NULL)
{
printf("%c",p->data);
p->lchild=Display(p->lchild);
p->rchild=Display(p->rchild);
}
}
int TreeDepth(BiTNode *p)
{
int lchilddep,rchilddep;
if(p==NULL)
return 0;
else
{
lchilddep=TreeDepth(p->lchild);
rchilddep=TreeDepth(p->rchild);
if(lchilddep>rchilddep)
return(lchilddep+1);
else
return(rchilddep+1);
}
/*return ok;*/
}
int Count(BiTNode *p)
{
if((p==NULL)||(!p->lchild)&&(!p->rchild))
return 0;
if((p->lchild)&&(p->rchild))
return 1+Count(p->lchild)+Count(p->rchild);
else
return Count(p->lchild)+Count(p->rchild);
}

main()
{
BiTNode *t;
printf("please input the tree:\n");
CreateTree(t);
printf("\nthe tree is:c\n",Display(t));
printf("\nthe high is:%d\n",TreeDepth(t));
printf("\npthe count is:%d\n",Count(t));
getch();
}
这是一个有关采用二叉树链表结构表示,设计并实现求一颗二叉树的深度和双分支结点的个数的问题




[解决办法]
Display 的返回值呢?不返回值不就无限调用了吗
[解决办法]
BiTNode *CreateTree(BiTNode *p)

应该是
BiTNode *CreateTree(BiTNode *&p)

否则
p=(BiTNode *)malloc(sizeof(BiTNode));
这句话不会改变指针t的值
[解决办法]
BiTNode *CreateTree(BiTNode *p) 函数有返回值,直接将分配的内存地址通过返回值返回,不需要通过参数将内存地址带出。

要么使用二级指针void CreateTree(BiTNode **p),将分配的内存地址通过参数带出。

[解决办法]

C/C++ code
#include "stdio.h"#include "malloc.h"#define ok 1typedef char ElemType;typedef struct BiTNode{  ElemType data;  struct BiTNode *lchild,*rchild;}BiTNode;void CreateTree(BiTNode **p){  char ch;  scanf("%c",&ch);  fflush(stdin);  if(ch=='#') {p=NULL;return 0;}  else  {  *p=(BiTNode *)malloc(sizeof(BiTNode));  *p->lchild=CreateTree(&(*p->lchild));  *p->rchild=CreateTree(&(*p->rchild));  *p->data=ch;  }}void Display( BiTNode *p){  if(p!=NULL)  {  printf("%c",p->data);  p->lchild=Display(p->lchild);  p->rchild=Display(p->rchild);  }}int TreeDepth(BiTNode *p){  int lchilddep,rchilddep;  if(p==NULL)  return 0;  else  {  lchilddep=TreeDepth(p->lchild);  rchilddep=TreeDepth(p->rchild);  if(lchilddep>rchilddep)  return(lchilddep+1);  else  return(rchilddep+1);  }  /*return ok;*/}int Count(BiTNode *p){  if((p==NULL)||(!p->lchild)&&(!p->rchild))  return 0;  if((p->lchild)&&(p->rchild))  return 1+Count(p->lchild)+Count(p->rchild);  else  return Count(p->lchild)+Count(p->rchild);}main(){  BiTNode *t;  printf("please input the tree:\n");  CreateTree(t);  printf("\nthe tree is:c\n",Display(t));  printf("\nthe high is:%d\n",TreeDepth(t));  printf("\npthe count is:%d\n",Count(t));  getch();} 


[解决办法]

探讨
BiTNode *CreateTree(BiTNode *&p)具体这是怎么用的

读书人网 >C语言

热点推荐