首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

该程序通过编译,却无法正确运行,求路过的高手帮忙改正一下,也许就是一些小疑点而已,非常感谢

2012-05-28 
该程序通过编译,却无法正确运行,求路过的高手帮忙改正一下,也许就是一些小问题而已,非常感谢!#include st

该程序通过编译,却无法正确运行,求路过的高手帮忙改正一下,也许就是一些小问题而已,非常感谢!
#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)具体这是怎么用的

热点排行