关于二叉树的问题,请高手帮帮忙!!!

huangbo0603 2011-05-10 12:15:05
首先我建立了一个以先序遍历的方法建立了二叉树,运行在数据输入时格式总是不对,还请各位帮忙解决一下!
代码如下:
# include <stdio.h>
# include <stdlib.h>
# define TRUE 1
# define FALSE 0
#define Stack_Size 50

typedef char DataType;
typedef struct node {
DataType data;
struct node *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree *bt )//建立二叉树
{
char ch='0';
ch=getchar();


if(ch=='.')
{
*bt=NULL;
return;
}
else
{
/* if (!(*bt = (BiTNode *)malloc(sizeof(BiTNode))))
exit (OVERFLOW);*/
*bt=(BiTree)malloc(sizeof(BiTNode));
(*bt)->data=ch;
CreateBiTree(&((*bt)->lchild));
CreateBiTree(&((*bt)->rchild));

}
// printf("二叉树已建立成功!");
}
void inorder(BiTree root)//中序非递归遍历二叉树
{
BiTNode *p;
int top;
BiTree S[Stack_Size];
top=0;
p=root;
//printf("ZYZ\n");
do{
while(p!=NULL)
{
if(top>Stack_Size-1)
{
printf("栈满\n");
return;
}
else
{
top=top+1;
S[top]=p;
p=p->lchild;

}
}
if (top!=0)
{
p=S[top];
top=top-1;
printf("%c",p->data);
p=p->rchild;
}
}while(p!=NULL||top!=0);
}

void PreOrder(BiTree root)//实现中序遍历递归
//root指向二叉树根结点
{ if(root!=NULL)
{

PreOrder(root->lchild);
printf("%c",root->data);
PreOrder(root->rchild);
}
}
void PostOrder (BiTree root)
{
if(root!=NULL)
{

PostOrder(root->rchild);
PostOrder(root->lchild);
printf("%c",root->data);
}
}
void main( )
{
BiTree T=NULL;
int xz=1;
//char ch;
while(1) {
printf(" 二叉树的建立及遍历\n");
printf("==========================\n");
printf(" 1、建立二叉树存储结构 \n");
printf(" 2、二叉树的前序遍历(递归)\n");
printf(" 3、二叉树的中序遍历(非递归)\n");
printf(" 4、二叉树的后序遍历");
printf(" 0、退 出 系 统 \n");
printf("===========================\n");
printf(" 请选择:0--4 ");
scanf("%d",&xz);
switch(xz)
{ case 0:
printf("再见!\n");
return;
case 1:
//ch=getchar();
printf("\n");
printf("按扩展先序遍历序列输入二叉树各结点值:");
CreateBiTree(&T);
printf("\n二叉树的链式存储结构建立完成!\n");
printf("\n");
break;
case 2:
printf("二叉树先序遍历序列为:");
if(T) PreOrder(T);
else printf("\n空树");
printf("\n");
printf("\n");
//xz=1;
break;
case 3:
printf("二叉树中序遍历序列为:");
inorder(T);
printf("\n");
// xz=1;
break;
case 4:
printf("二叉树中序遍历序列为:");
PostOrder(T);
printf("\n");
//xz=1;
break;
default:
printf("你输入有误请从新输入!");
break;
}
}

}//main
...全文
101 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangbo0603 2011-05-10
  • 打赏
  • 举报
回复
各位麻烦啊!急求答案啊
huangbo0603 2011-05-10
  • 打赏
  • 举报
回复
thank you !
SUNKNG 2011-05-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 selooloo 的回复:]
清除缓存

ch=getchar();
fflush(stdin);
[/Quote]
同意
selooloo 2011-05-10
  • 打赏
  • 举报
回复
清除缓存

ch=getchar();
fflush(stdin);
leebeen34 2011-05-10
  • 打赏
  • 举报
回复

typedef struct BiTNode
{
int data;//结点数据
BiTNode *lchild;//左子树
BiTNode *rchild;//右子树
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T)
{
char c;
cin>>c;
if((char)c=='`')
{
T=NULL;
}
else
{
T=new BiTNode;//给T开辟内存空间
if(!T)//T为空
{
exit(0);
}
T->data=c;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void PreOrderTraverse(BiTree T)
{
if(T)//二叉树非空
{
cout<<(char)T->data<<" ";//访问根结点
PreOrderTraverse(T->lchild);//先序遍历左子树
PreOrderTraverse(T->rchild);//先序遍历右子树
}
else
{
cout<<"`"<<" ";
}
}
void InOrderTraverse(BiTree T)
{
if(T)//二叉树非空
{
InOrderTraverse(T->lchild);//中序遍历左子树
cout<<(char)T->data<<" ";//访问根结点
InOrderTraverse(T->rchild);//中序遍历右子树
}
else
{
cout<<"`"<<" ";
}
}
void PostOrderTraverse(BiTree T)
{
if(T)//二叉树非空
{
PostOrderTraverse(T->lchild);//后序遍历左子树
PostOrderTraverse(T->rchild);//后序遍历右子树
cout<<(char)T->data<<" ";//访问根结点
}
else
{
cout<<"`"<<" ";
}
}
int main(int argc, char* argv[])
{
BiTree T=new BiTNode;
cout<<"创建二叉树:"<<endl;
CreateBiTree(T);
cout<<endl;
cout<<"先序遍历:"<<endl;
PreOrderTraverse(T);
cout<<endl;
cout<<"中序遍历:"<<endl;
InOrderTraverse(T);
cout<<endl;
cout<<"后序遍历:"<<endl;
PostOrderTraverse(T);
cout<<endl;
return 0;
}
xiaoguangzaia 2011-05-10
  • 打赏
  • 举报
回复
你在创建树时使用getchar输入。因为之前已经有输入了比如你输入1
你输入的是 1 + enter 。你进入getchar接收的就是 enter
huangbo0603 2011-05-10
  • 打赏
  • 举报
回复
只用看建立二叉树的那个函数,然后运行了,帮我看看如何输入数据才符合规则,麻烦一下大家嘛!
csdmdsc 2011-05-10
  • 打赏
  • 举报
回复
程序太长了,不想看
syai 2011-05-10
  • 打赏
  • 举报
回复
要上课啦,回来see see
VR(Virtual Reality)即虚拟现实,是一种可以创建和体验虚拟世界的计算机技术。它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真,使用户沉浸到该环境中。VR技术通过模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间。 VR技术具有以下主要特点: 沉浸感:用户感到作为主角存在于模拟环境中的真实程度。理想的模拟环境应该使用户难以分辨真假,使用户全身心地投入到计算机创建的三维虚拟环境中,该环境中的一切看上去是真的,听上去是真的,动起来是真的,甚至闻起来、尝起来等一切感觉都是真的,如同在现实世界中的感觉一样。 交互性:用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度(包括实时性)。例如,用户可以用手去直接抓取模拟环境中虚拟的物体,这时手有握着东西的感觉,并可以感觉物体的重量,视野中被抓的物体也能立刻随着手的移动而移动。 构想性:也称想象性,指用户沉浸在多维信息空间中,依靠自己的感知和认知能力获取知识,发挥主观能动性,寻求解答,形成新的概念。此概念不仅是指观念上或语言上的创意,而且可以是指对某些客观存在事物的创造性设想和安排。 VR技术可以应用于各个领域,如游戏、娱乐、教育、医疗、军事、房地产、工业仿真等。随着VR技术的不断发展,它正在改变人们的生活和工作方式,为人们带来全新的体验。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧