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

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