实验四 树 【实验目的】 1、 掌握树这种数据结构的特点和树的存储结构; 2、掌握二叉树的建立(二叉链表的

搞出来再加分
速度啊

#include<stdio.h>
#include<stdlib.h>
int tag=0;
typedef struct tnode
{
char data;
struct tnode *lchild;
struct tnode *rchild;
}TNode;
/*
**建立二叉树
*/
TNode *
creat_tree()
{
TNode *p;
p=(TNode *)malloc(sizeof(TNode));
if(p==NULL){
printf("error!\n");
exit(0);
}
scanf("%c",&p->data);//输入ABD@F@@EG@@H@@C@@
if(p->data=='@')return NULL;
p->lchild=creat_tree();
p->rchild=creat_tree();
return p;
}
/*
**先序遍历二叉树
*/
void
first_tree(TNode *p)
{
if(p==NULL)return;
printf("%c ",p->data);
first_tree(p->lchild);
first_tree(p->rchild);
}
/*
**中序遍历二叉树
*/
void
middle_tree(TNode *p)
{
if(p==NULL)return;
middle_tree(p->lchild);
printf("%c ",p->data);
middle_tree(p->rchild);
}
/*
**后序遍历二叉树
*/
void
last_tree(TNode *p)
{
if(p==NULL)return;
last_tree(p->lchild);
last_tree(p->rchild);
printf("%c ",p->data);

}
/*
**查找函数
*/
void
search_tree(TNode *p,char data)
{
char value;
//tag=0;
if(p==NULL)return;
value=p->data;
if(value==data)tag=1;
search_tree(p->lchild,data);
search_tree(p->rchild,data);

}

int
main(void)
{
TNode *p;
p=creat_tree();
printf("先序输出:\n");
first_tree(p);
printf("\n中序输出:\n");
middle_tree(p);
printf("\n后序输出:\n");
last_tree(p);
printf("\n");
TNode *ptr;
ptr=(TNode *)malloc(sizeof(TNode));
if(ptr==NULL){
printf("error!\n");
exit(0);
}
printf("请输入查找节点的值:\n");
getchar();
scanf("%c",&ptr->data);
search_tree(p,ptr->data);
if(tag==0)printf("false!\n");
if(tag==1)printf("true!\n");
return 0;
}追问

遍历时可以注意一下格式么,,谢谢,麻烦了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-07
该结构的数据元素间的关系是“属于同一个集合”。
⑵线性结构。该结构的数据元素之间存在着一对一的关系。
⑶树型结构。该结构的数据元素之间存在着一对多的关系。
⑷图形结构。该结构的数据元素之间存在着多对多的关系,也称网状结构。
顺序存储结构是最常用的结构。但是有挺多不好之处,如下:
(1)数据元素的的最大个数需要预先知道,这就必须使高级语言设计的时候给这个串或者数组分配好预留空间。
(2)为了保持顺序表中的数据元素的顺序,在插入和删除元素的时候,需要大量移动数据。对一个有n个元素的顺序表,插入或者删除一个元素平均需要移动n/2次。这样就很频繁的进行插入和删除操作的问题、以及每个数据占字节较大的问题将会导致系统运行速度减慢。