该程序通过编译,却无法正确运行,求路过的高手帮忙改正一下,也许就是一些小疑点而已,非常感谢
该程序通过编译,却无法正确运行,求路过的高手帮忙改正一下,也许就是一些小问题而已,非常感谢!
#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),将分配的内存地址通过参数带出。
------解决方案--------------------
#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 1 typedef 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(); }