| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 834 人关注过本帖
标题:一个二叉树的简单应用,运行结果不对,求各位大侠帮帮忙呀。。。不盛感激
只看楼主 加入收藏
zcs302567601
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2009-9-21
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:4 
一个二叉树的简单应用,运行结果不对,求各位大侠帮帮忙呀。。。不盛感激
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int Keytype;//
typedef struct node
{ Keytype score;//成绩设为关键字
    char name[10];//学生成绩
    char xuenum[12];//学号
    struct node *lchild,*rchild;
    }Stunode;
typedef Stunode * Stutree;
inserttree(Stutree *T,Stunode *S)//插入树的结点
{Stunode *p,*f=*T;
    while(!p){
        f=p;
        p=((S->score)<=(p->score))?p->lchild:p->rchild;
    }
    p=(Stunode *)malloc(sizeof(Stunode));
    strcpy(p->name,S->name);
    strcpy(p->xuenum,S->xuenum);
    p->score=S->score;   
    p->lchild=NULL;
    p->rchild=NULL;
    if(*T==NULL)*T=p;
    else
    if(S->score<=f->score)f->lchild=p;
    else f->rchild=p;     
}
Stutree creatree()//建立二叉排序树
{  Stutree T=NULL;   
    Stunode *Stuinfo;
    char flag;
    flag='y';
    printf("输入学生信息:\n");
    printf("学生姓名 学号 学习成绩  \n");   
    while(flag=='y'||flag=='Y')
    {
    Stuinfo=(Stunode *)malloc(sizeof(Stunode));
    scanf("%s,%s,%d",Stuinfo->name,Stuinfo->xuenum,&Stuinfo->score);
    inserttree(&T,Stuinfo);
    printf("还有吗?y/n\n");
    getchar();
    flag=getchar();
    }
    return T;
    }
void Inorder(Stutree root)//中序遍历
{
    if(root!=NULL)
    {
    Inorder(root->lchild);
    printf("%s,%s,%d\n",root->name,root->xuenum,root->score);
    Inorder(root->rchild);
}
}
Stunode *searchtree(Stutree T,Keytype Stuscore)//查找学生信息
 {  if(T==NULL||Stuscore==T->score)
     return T;
   if(Stuscore<=T->score)
    return searchtree(T->lchild,Stuscore);
   if(Stuscore>T->score)
    return searchtree(T->rchild,Stuscore);
   }

main()
{
  Stutree root;
  int Stuscore;
  Stunode *student;
 printf("生成二叉树:\n");
     root=creatree();
 printf("中序遍历输出结果:\n");
 printf("学生姓名 学号 学习成绩:\n");
   Inorder(root);
 printf("输入你要查找的学生成绩:");
   scanf("%d",&Stuscore);
 printf("\n");
 student=searchtree(root,Stuscore);
 if(!student)
 printf("没有查到成绩为%d的学生",Stuscore);
 else{
     printf("成绩为%d的学生信息:\n",Stuscore);
    printf("%s,%s,%d\n",student->name,student->xuenum,student->score);  
   }
}
搜索更多相关主题的帖子: 二叉树 应用 结果 感激 
2009-11-22 07:44
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:30 
inserttree(Stutree *T,Stunode *S)//插入树的结点
{Stunode *p,*f=*T;
    while(!p){//这里p到底是不是空,谁知道?
        f=p;
        p=((S->score)<=(p->score))?p->lchild:p->rchild;
    }
    p=(Stunode *)malloc(sizeof(Stunode));
    strcpy(p->name,S->name);
    strcpy(p->xuenum,S->xuenum);
    p->score=S->score;   
    p->lchild=NULL;
    p->rchild=NULL;
    if(*T==NULL)*T=p;
    else
    if(S->score<=f->score)f->lchild=p;
    else f->rchild=p;     
}

要练习算法就来http:///!!有挑战哦!!
2009-11-22 10:38
zcs302567601
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2009-9-21
收藏
得分:0 
回复 2楼 viky2003
已经把那个改 了,这样对吗?但运行还是不对呀。。。
Stunode *f,*p=*T;
    while(p){
        f=p;
        p=((S->score)<=(p->score))?p->lchild:p->rchild;
    }
2009-11-22 10:56
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:0 
程序代码:
inserttree(Stutree *T,Stunode *S)//插入树的结点
{Stunode *p,*f=*T;
    while(!p){
        f=p;
        p=((S->score)<=(p->score))?p->lchild:p->rchild;
    }
    p=(Stunode *)malloc(sizeof(Stunode));
    strcpy(p->name,S->name);
    strcpy(p->xuenum,S->xuenum);
    p->score=S->score;   
    p->lchild=NULL;
    p->rchild=NULL;
    if(*T==NULL)*T=p;
    else
    if(S->score<=f->score)f->lchild=p;
    else f->rchild=p;  
这段代码看不懂是什么意思。Stunode *S既然有了,为啥还有非配空间。
我写一个简单的给你参考吧:

程序代码:
void createTree(stutree *root,stunode *node)
{
  if(root == NULL || node == NULL)
    return ;
 if(*root == NULL)
 {
   *root = node;
 }
 else if((*root)->score >= node->score)//分数小的放在左边;
   createTree(&(*root)->lchild,node);
 else
   createTree(&(*root)->rchild, node);
}
这样比较简单,只需要malloc然后输入,调用这个函数就可以了。


要练习算法就来http:///!!有挑战哦!!
2009-11-22 11:14
zcs302567601
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2009-9-21
收藏
得分:0 
各位能不能把我的源程序改改呀。。。
2009-11-22 13:45
快速回复:一个二叉树的简单应用,运行结果不对,求各位大侠帮帮忙呀。。。不盛感 ...
数据加载中...
 
   



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

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