请大家帮我看一下这个程序,功能主要是实现二叉树的基本操作;好像是遍历那个地方错误,其他的也有一些!但我怎么也找不到!希望前辈们能够指点一二!
还有就是那个visit函数怎么用指针实现?
#include "stdio.h"
#include "stdlib.h"
#define TRUE 1
#define FLASE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef struct BitNode
{char data;
struct BitNode *lchild,*rchild;
}BitNode,*BitTree;
void BinTreeInit(BitTree BT) /* 初始化二叉树,即把树根指针置空 */
{BT=NULL;
}
int BinTreeCreat(BitTree BT) /* 按先序次序建立一个二叉树*/
{char ch;
printf("请输入一个字符:");
scanf("%c",&ch);
if (ch=='#') BT=NULL;
else {
if(!(BT=(BitNode *)malloc(sizeof(BitNode))))
return ERROR;
BT->data=ch; /*生成根结点*/
BinTreeCreat(BT->lchild); /*构造左子树*/
BinTreeCreat(BT->rchild); /*构造右子树*/
}
return OK;
}
int BinTreeEmpty(BitTree BT) /* 检查二叉树是否为空 */
{if(BT=NULL) return OK;
return FLASE;
}
int BinTraverse(BitTree BT) /* 按先序输出二叉树中的所有结点 */
{if(BT)
{if(visit(BT->data))
if(BinTraverse(BT->lchild))
if(BinTraverse(BT->rchild)) return OK;
return ERROR;
}
else return OK;
}
int visit(char m)
{printf("%c",m); /*出错???*/
return OK;
}
int BinTreeDepth(BitTree BT) /* 求二叉树的深度 */
{int depth,m,n;
if(!BT) depth=0;
else{
m=BinTreeDepth(BT->lchild);
n=BinTreeDepth(BT->rchild);
depth=1+(m>n?m:n);
}
return depth;
}
int BinTreeCount(BitTree BT) /* 求二叉树中所有结点数 */
{int count=0;
if(BT)
{count++;
BinTreeCount(BT->lchild);
BinTreeCount(BT->rchild);
}
return count;
}
void BinTreeClear(BitTree BT) /* 清除二叉树,使之变为空树 */
{BT=NULL;
}
main()
{int m;
int k=1;
BitTree BT;
printf("*********************************************************************************\n");
printf(" 用户您好:请先建立一个待检测的二叉树\n");
/*BinTreeCreat(BT);
BinTraverse(BT);*/
printf(" 检验结果菜单\n");
printf("1.初始化二叉树\n");
printf("2.按先序次序建立一个二叉树\n");
printf("3.检查二叉树是否为空(为空返回1,否则返回0)\n");
printf("4.按先序输出二叉树中的所有结点\n");
printf("5.求二叉树的深度\n");
printf("6.求二叉树中所有结点数\n");
printf("7.清除二叉树,使之变为空树\n");
printf("8.退出\n");
while(k!=8)
{printf(" 请选择:");
scanf("%d",&k);
switch(k)
{case 1: BinTreeInit(BT);break;
case 2: BinTreeCreat(BT);
BinTraverse(BT);break;
case 3: m=BinTreeEmpty(BT);
printf("%d",m);break;
case 4: BinTraverse(BT);break;
case 5: m=BinTreeDepth(BT);
printf("二叉树的深度为:%d",m);break;
case 6: m=BinTreeCount(BT);
printf("二叉树的所有结点数为:%d",m);break;
case 7: BinTreeClear(BT);break;
case 8: break;
default: printf("错误\n");break;
}
}
}
[此贴子已经被作者于2007-6-8 7:43:00编辑过]