| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 893 人关注过本帖
标题:二叉排序树问题
只看楼主 加入收藏
JJ是也
Rank: 2
等 级:论坛游民
帖 子:23
专家分:10
注 册:2012-1-16
结帖率:66.67%
收藏
 问题点数:0 回复次数:2 
二叉排序树问题
程序代码:
#include <stdio.h>
#include <malloc.h>

typedef struct node
{
    int key;
    struct node *lchild, *rchild;
}*bilist, binode;

bilist Insert (bilist t, binode *s)
{
    binode *p, *q;

    if (t==NULL)
        return s;

    p = t;
    while (p!=NULL)
    {
        q = p;            //q结点为p结点的双亲
        if (s->key==p->key)
            return t;
        else if (s->key > p->key)
            p = p->rchild;
        else
            p = p->lchild;
    }

    if (s->key > q->key)
        q->rchild = s;
    else
        q->lchild = s;

    return t;
}

bilist CreateBST (bilist t)
{
    binode *s;
    int i, n;
    int key;

    t = NULL;
    printf ("结点数:");
    scanf ("%d", &n);
    printf ("输入%d个结点的编号:", n);
    for (i=1; i<=n; i++)
    {
        scanf ("%d", &key);
        s = (binode*) malloc (sizeof(binode));
        s->lchild = NULL;
        s->rchild = NULL;
        s->key = key;
        t = Insert (t, s);
    }
    return t;
}

void InorderBST (bilist t)
{
    binode *s;

    s = t;
    if (s!=NULL)
    {
        InorderBST (s->lchild);
        printf ("%d ", s->key);
        InorderBST (s->rchild);
    }
}

void InsertBST (bilist t, int k)
{
    binode *p, *f;

    p = t;
    while (p)
    {
        if (p->key==k)
            return;
        f = p;
        p = (k < p->key) ? p->lchild : p->rchild;
    }

    p = (binode*) malloc (sizeof(binode));
    p->key = k;
    p->lchild = p->rchild = NULL;

    if (t==NULL)        //若t为空则直接插入
        t = p;

    else if (k < f->key)
        f->lchild = p;

    else
        f->rchild = p;
}

void FreeBST (bilist t)
{
    if (t->lchild)
        FreeBST (t->lchild);
    if (t->rchild)
        FreeBST (t->rchild);
    free (t);
}

void main ()
{

    int pa, i;
    char ch;
    bilist T;

    T = CreateBST (T);
    printf ("二叉查找树的中序遍历为:");
    InorderBST (T);
    printf ("\n");
   
    printf ("是否插入关键字?(Y/N)");
    ch = getchar ();                //这句运行不了
    while (ch=='Y' || ch=='y')
    {
        printf ("请输入关键字:");
        scanf ("%d", &pa);
        InsertBST (T, pa);
        printf ("是否继续插入关键字?(Y/N)");
        ch = getchar ();
    }

    printf ("新二叉查找树的中序遍历为:");
    InorderBST (T);
    printf ("\n");
    FreeBST (T);

}
各位大神们,请问为什么以下这段代码运行不了?   
我是想实现动态插入结点的,就是随意增加结点个数,直到输入N时结束增加结点
    ch = getchar ();
    while (ch=='Y' || ch=='y')
    {
        printf ("请输入关键字:");
        scanf ("%d", &pa);
        InsertBST (T, pa);
        printf ("是否继续插入关键字?(Y/N)");
        ch = getchar ();
    }
搜索更多相关主题的帖子: color 
2012-06-06 13:59
westfall999
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:40
专家分:101
注 册:2012-7-22
收藏
得分:0 
void main ()
{

    int pa, i;
    char ch;
    bilist T;

    T = CreateBST (T);
    printf ("二叉查找树的中序遍历为:");
    InorderBST (T);
    printf ("\n");
    fflush(stdin);    //添加这句,原输入缓冲区中残留有数据,会残留给getchar();
    printf ("是否插入关键字?(Y/N)");
    ch = getchar ();                //这句运行不了
    while (ch=='Y' || ch=='y')
    {
        printf ("请输入关键字:");
        scanf ("%d", &pa);
        InsertBST (T, pa);
        fflush(stdin);    //添加这句,原输入缓冲区中残留有数据,会残留给getchar();
        printf ("是否继续插入关键字?(Y/N)");
        ch = getchar ();
    }

    printf ("新二叉查找树的中序遍历为:");
    InorderBST (T);
    printf ("\n");
    FreeBST (T);

}
2012-07-23 19:47
nuistkevin
Rank: 2
等 级:论坛游民
帖 子:17
专家分:10
注 册:2013-4-15
收藏
得分:0 
猎头职位-软件工程师
岗位职责
1.与世界顶尖的软件工程师共同开发虚拟化云计算产品
2.能独立处理和解决所负责的任务;
3.进行程序单元、功能的测试,查出软件存在的缺陷并保证其质量。
任职资格
1、 211或985高校计算机科学与技术或软件专业,英文流利;
2、 具有很强的学习能力和解决问题的能力;
3、 至少3年以上软件开发经验,精通C语言/C++,热衷于技术专研;
4、 熟练的数据结构知识体系与较强的算法能力,对堆栈、2X树、多X树有一定了解
5、 熟悉Windows, Linux X86/64 操作系统;
6、 熟悉Network configurations and environments;

工作地点:上海
有意者可以发送您的中英文简历至邮箱:
junpingwu@
QQ:2571168815
2013-04-15 12:37
快速回复:二叉排序树问题
数据加载中...
 
   



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

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