主题:求算法(简单不要见笑)
plfay
[专家分:0] 发布于 2007-03-23 17:11:00
第三题:输入一个字符串,建立一个二叉排序树,并中序遍历输出;
要求:TC环境
回复列表 (共5个回复)
沙发
挑战者1号 [专家分:0] 发布于 2007-03-23 18:49:00
等待中^^^^^^^^
板凳
江南孤峰 [专家分:1520] 发布于 2007-03-24 15:51:00
// 二叉排序树的插入很简单,真正效率高的是AVL树,插入麻烦点
// 至于中序输出,用递归就可以了,不过效率不高
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define MAX 60
typedef struct tree{
char c;
struct tree *left;
struct tree *right;
}Stree;
Stree *root;
Stree* GetNewNode(){
Stree *temp;
temp = (Stree*)malloc(sizeof(Stree));
if(!temp){
printf("\a Memory alloc failed !");
exit(1);
}
temp->left = NULL;
temp->right = NULL;
return temp;
}
void InsertTree(char c){
Stree *temp,*find;
temp = GetNewNode();
temp->c = c;
find = root;
while(1){
if(find->c > c){
if(!find->left){
find->left = temp;
break ;
}
else
find = find->left;
}
else {
if(!find->right){
find->right = temp;
break;
}
else
find = find->right;
}
}
}
void MiddleOut(Stree* ptree){
printf("%c",ptree->c);
if(ptree->left)
MiddleOut(ptree->left);
if(ptree->right)
MiddleOut(ptree->right);
}
void FreeMem(){
[color=FF0000]/* 交给楼主 */[/color]
}
int main(){
char str[MAX];
int i;
root = GetNewNode();
scanf("%s",str);
root->c = str[0];
for(i = 1; str[i]; i ++)
InsertTree(str[i]);
MiddleOut(root);
FreeMem();
return 0;
}
3 楼
plfay [专家分:0] 发布于 2007-03-24 23:43:00
谢谢楼上大侠
4 楼
plfay [专家分:0] 发布于 2007-03-25 00:36:00
#include"stdio.h"
#define MAX 60
typedef struct tree
{
char c;
struct tree *left;
struct tree *right;
}Stree;
Stree *root;
Stree * getnewnode()
{
Stree *temp;
temp=(Stree *)malloc(sizeof(Stree));
if(!temp)
{
printf("Memory alloc failed!");
exit(1);
}
temp->left=NULL;
temp->right=NULL;
return temp;
}
middle(Stree *ptree)
{
if(ptree->left)
middle(ptree->left);
printf("%c",ptree->c);
if(ptree->right)
middle(ptree->right);
}
insert(char c)
{
Stree *temp, *find;
temp=getnewnode();
temp->c=c;
find=root;
while(1)
{
if(find->c>c)
{
if(!find->left)
{
find->left=temp;
break;
}
else
find=find->left;
}
else
{
if(!find->right)
{
find->right=temp;
break;
}
else
find=find->right;
}
}
}
main()
{
char str[MAX];
int i;
root=getnewnode();
scanf("%s",str);
root->c=str[0];
for(i=1;str[i];i++)
insert(str[i]);
middle(root);
}
5 楼
plfay [专家分:0] 发布于 2007-03-25 00:38:00
根据大侠给出整理了一个可直接运行的C程序
再次感谢!
这个对我十分重要。
我来回复