| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付赛孚耐:软件保护加密专家
身份认证令牌USB KEY   
共有 711 人关注过本帖
标题:『求助』C语言实现二叉树基本操作
收藏  订阅  推荐  打印 
MrLZ
Rank: 1
等级:新手上路
帖子:2
积分:124
注册:2007-12-6
『求助』C语言实现二叉树基本操作

【实验内容与要求】
问题描述:采用二叉链表作为存储结构,完成二叉树的建立和遍历操作。
基本要求:
(1)基于先序遍历的构造算法。输入是二叉树的先序序列,但必须在其中加入虚结点以示空指针的位置。假设虚结点输入时用空格字符表示。
(2)利用中序顺序遍历所建的二叉树,将遍历结果打印输出。

我写的程序
#include<stdio.h>
#define NULL 0

struct BiTree
{char data;
struct BiTree *ld,*rd;};

CreateBiTree(BiTree *T)
{
char ch;
scanf(&ch);
if(ch==' ') t=NULL;
else
{
if(!(T=(BiTree*)malloc(sizeof(BiTree)))) exit()
T.data=ch;
CreatBiTree(T.ld);
CreatBiTree(T.rd);
}
return OK;
}

InOrderprint(BiTree T)
{
BiTree Stack[255];
int top=0;
Stack[top++]=T;
if(Stack[0].data==' ')
printf("The BiTree is NULL!");
else
while(top>=0)
{
for(;T.ld.data!=' ';)
{
Stack[top++]=T.ld;
T=T.ld;
}
top--;
printf("%c",&T.data);
if(T.rd.data==' ') top--;
else{T=t.rd; top--};;
}
}

main()
{
BiTree *T;
printf("Please input the data by PreOrder:");
CreateBiTree(T);
printf("\nThe BiTree in InOrder is:") ;
InOrderprint(*T)
}


编译时提示
CreateBiTree(BiTree *T)
这行声明有错
不解
请各位指教
=。=!
搜索更多相关主题的帖子: 二叉树  C语言  遍历  BiTree  结点  
2007-12-6 12:45
liweiqing
Rank: 2
等级:注册会员
帖子:72
积分:846
注册:2007-10-16

结点类型应该是struct BiTree才是!!!

岂能尽如人意,但求无愧于心.
2007-12-6 19:00
missiyou
Rank: 12Rank: 12Rank: 12
等级:版主
威望:11
帖子:366
积分:3596
注册:2007-10-9

#include<stdio.h>
#define NULL 0

struct BiTree
{char data;
struct BiTree *ld,*rd;};

CreateBiTree(BiTree *T)
{
char ch;
scanf(&ch);//改为getch(ch)
if(ch==' ') t=NULL;//这个t改为大写
else
{
if(!(T=(BiTree*)malloc(sizeof(BiTree)))) exit()
T.data=ch;
CreatBiTree(T.ld);//CreateBiTree(T->ld)
CreatBiTree(T.rd);//CreateBiTree(T->rd);
}
return OK;
}

InOrderprint(BiTree T)//这个地方改为指针。BiTree *T
{
BiTree Stack[255];
int top=0;
++top;
Stack[top]=T;//
if(Stack[0].data==' ')这个只要if(!T)
printf("The BiTree is NULL!");
else
while(top>=0)     算了,自己写一下吧,while(T!=NULL&&top>0){while(T->ld!=NULL){Stack[top]=T;top++;T=T->ld;}
                                printf(T->data);
                                  if(T->rd)
                               { T=T->rd;
                                    }
                              else
                               {
                                   top--
                                }
                                }
{
for(;T.ld.data!=' ';)
{
Stack[top++]=T.ld;
T=T.ld;
}
top--;
printf("%c",&T.data);
if(T.rd.data==' ') top--;
else{T=t.rd; top--};;
}
}

main()
{
BiTree *T;//这里不能这样定义,因为在结构体没有定义BiTree为别名,所以在结构
下面加上一句,typedef struct BiTree BiTree//在这里BiTree *T 还要申请一下,

printf("Please input the data by PreOrder:");
CreateBiTree(T);
printf("\nThe BiTree in InOrder is:") ;
InOrderprint(*T)
}
啊,改了好长,也不知道对不对,各位在看看吧,
2007-12-6 22:28
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.061227 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved