| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 607 人关注过本帖
标题:[求助]:二叉树的基本操作
只看楼主 加入收藏
d454268523
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-6-4
收藏
 问题点数:0 回复次数:3 
[求助]:二叉树的基本操作

请大家帮我看一下这个程序,功能主要是实现二叉树的基本操作;好像是遍历那个地方错误,其他的也有一些!但我怎么也找不到!希望前辈们能够指点一二!
还有就是那个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编辑过]

搜索更多相关主题的帖子: 二叉树 define include 
2007-06-08 07:35
d454268523
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-6-4
收藏
得分:0 

没人帮我的忙吗??
2007-06-13 19:42
herbert_1987
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:1314
专家分:0
注 册:2007-5-13
收藏
得分:0 
估计不是那个地方出错,是其它地方引起的.

人生重要的不是所站的位置,而是所朝的方向
2007-06-13 22:42
d454268523
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-6-4
收藏
得分:0 
以下是引用herbert_1987在2007-6-13 22:42:11的发言:
估计不是那个地方出错,是其它地方引起的.

我也知道是那个地方出错,语法都正确!
可就是不知道什么原因能导致那样的错误!
其他的我也找不到错误!

2007-06-14 09:40
快速回复:[求助]:二叉树的基本操作
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027156 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved