二叉排序树怎么构造_建立二叉排序树_怎么画二叉排序树(3)

电脑杂谈  发布时间:2017-02-12 21:02:56  来源:网络整理

为了存储和管理输入数据,增加两个与数组相关的函数

//产生n个不重复的随机数
void Createnum(int n, int *num)
{
    int vol, i, j, flag;
    //产生随机数,存储在num数组中
    for (i = 0; i<n; i++)
    {
        vol = rand() % 100;
        flag = 1;
        //判断生成的数是否重复
        for (j = 0; j < i; j++)
        {
            if (vol == num[j]){ flag = 0; break; }
        }
        if (flag) num[i] = vol;
        else --i;
    }  //生成100以内的整数
}

//将数组中的数输出
void show_num(int n, int *num)
{
    int i;
    for (i = 0; i<n; i++)
    {
        printf("%3d ", num[i]);
        if ((i + 1) % 5 == 0) printf("\n");
    }   //输出生成的25个整数
}
void main()
{
    int x, y, g;
    int i, a, b, c;
    int num[100];  //输入n上限为100
    int gdriver, gmode;
    x = 320, y = 30, g = 0;
    gdriver = DETECT;
    while (1)
    {
        //创建二叉排序树
        printf("随机生成多少数?    ");
        scanf_s("%d", &b);
        srand(time(NULL));   //设置随机数
        Createnum(b, num);
        printf("所有随机数为:\n");
        show_num(b, num);
        printf("\n按任意键开始生成二叉排序树      ");
        getchar();
        T = Create(b, num);
        if (T != NULL) printf("生成成功!");
        else
        {
            printf("生成失败!");
            break;
        }
        printf("\n前序遍历结果:(ENTER)");
        getchar();
        prorder(T);
        //打印树形
        printf("\n按任意键开始打印树形");
        getchar();
        // BGI 格式的初始化图形设备,长*宽,flag
        initgraph(800, 550, 0);
        setbkcolor(0);    //设置背景颜色
        cleardevice();  //清屏
        Paint(T, x, y, g);
        getchar();
        closegraph();  //关闭窗口
        //删除过后打印树形
        printf("请输入要删除的数的序号: ");
        scanf_s("%d", &a);
        DeleteBT(&T, num[a - 1]);
        initgraph(800, 550, 0);
        setbkcolor(0);    //设置背景颜色
        cleardevice();  //清屏
        Paint(T, x, y, g);
        getchar();
        getchar();
        closegraph();  //关闭窗口
        printf("前序遍历结果:(ENTER)");
        getchar();
        prorder(T);
        printf("是否继续?");
        scanf_s("%d", &c);
        if (!c) break;
        system("cls");
    }
    system("pause");
}

生成二叉树并打印出树的形状:

删除节点,输入序号是10,也就是上面输出数组的第十个元素,注意,这里的标号是从1开始的,所以删除了值为64的节点。

这里写图片描述

这里写图片描述

输出新的前序遍历结果,可以观察到与刚开始结果的变化,最后键入1重新开始,键入0结束。

这里写图片描述

由于画图操作中用到一些以前Dos界面上的函数,在VS2010等新版的环境中不支持(虽然我试了老版本的VC++等也不支持,但百度上是么说的)。建立二叉排序树这里需要安装一个EasyX的插件,这里附上下载链接:


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-32053-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 仁青卓玛
      仁青卓玛

      没有一发炮弹击穿主装甲

    热点图片
    拼命载入中...