您现在的位置:计算机技术学习网 > 技术中心 > 编程开发 > C >

C语言课程设计_二叉树演示源程序

来源:不详 责任编辑:栏目编辑 发表时间:2013-07-01 20:57 点击:

/********tree2.c二叉树演示********/
#include <graphics.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <time.h>
typedef struct TREE
{
   char data;/*树的结点数据*/
   struct TREE *lchild;
   struct TREE *rchild;
   int x;/*树的x坐标*/
   int y;/*树的y坐标*/
}Tree;
struct OUTPUT
{
   int x;/*三种遍历的x坐标*/
   int y;/*三种遍历的y坐标*/
   int num;
}s;
int nodeNUM=0;/*统计当前的结点数字,最多26个*/
char way;/*自动建立树和手动建立树的标志,2手动,1自动*/
char str[3];/*显示结点数据的字符串*/
void Init();/*图形初始化*/
void Close();/*图形关闭*/
Tree *CreatTree();/*文本模式下创建树的过程*/
Tree *InitTree(int h,int t,int w);/*创建树,h层次,t横坐标,w树之间的宽度,n树的建立方式*/
void DrawTree(Tree *t);/*用图形显示创建好的树*/
void Preorder(Tree *t);/*前序遍历*/
void Midorder(Tree *t);/*中序遍历*/
void Posorder(Tree *t);/*后序遍历*/
void DrawNode(Tree *t,int color);/*遍历时显示每个结点的过程*/
void ClrScr();/*清空树的区域*/
void main()
{
   Tree *root;
   randomize();
   root=CreatTree();/*创建树*/
   Init();
   DrawTree(root);/*每次遍历前显示白色的树*/
   sleep(1);
   s.x=100;s.y=300;s.num=1;/*每次遍历前设置显示遍历顺序显示的x,y坐标*/
   Preorder(root);/*前序遍历*/
   getch();
   ClrScr();
   DrawTree(root);
   sleep(1);
   s.x=100;
   s.y=350;
   s.num=1;
   Midorder(root);/*中序遍历*/
   getch();
   ClrScr();
   DrawTree(root);
   sleep(1);
   s.x=100;
   s.y=400;
   s.num=1;
   Posorder(root);/*后序遍历*/
   Close();
}
/*清空树的区域*/
void ClrScr()
{
   setcolor(BLACK);
   setfillstyle(SOLID_FILL,BLACK);
   bar(0,20,640,280);
}
/*文本模式下创建树的过程*/
Tree *CreatTree()
{
   Tree *root;
   clrscr();
   printf("please input n\n");
   printf("1.computer creat\n");
   printf("2.people creat\n");
   way=getch();/*输入创建树的方法,1
电脑自动建立,2人工手动建立*/
   if(way!='2')
      way='1';/*其他数字默认自动建立*/
   if(way=='2')/*手动建立提示输入结点*/
      printf("Please creat the tree\n");
   root=InitTree(1,320,150);
   system("pause");
   return root;
}
/*生成二叉树,h表示层次,t表示横坐标,w表示结点左右子树的宽度,随机数n确定结点是空或非空,如n为0,则为空*,但要限定确保结点数不少于三个*/
Tree *InitTree(int h,int t,int w)
{
   char ch;
   int n;/*自动建立时随机赋值判断是否是NULL的标志*/
   Tree *node;
   if(way=='2')/*手动建立需要自己输入*/
      scanf("%c",&ch);
   else/*自动建立的赋值*/
   {
      n=random(5);
      if(n==0&&nodeNUM>=3)/*随机赋值时候确保自动建立的二叉树有三个结点*/
  ch='.';
      else
  ch=65+random(25);
   }


   if(ch=='.')/*输入空格代表NULL*/
      return NULL;
   else
   {
      if(h==6||nodeNUM==26)/*如果树的层次已经到5或者结点树到达26个就自动返回NULL*/
  return NULL;
      node=(Tre

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Glib实例学习(2)双链表
    • C程序员要学C++吗?
    • C++中实现Singleton的正确方法
    • 编程思维训练(一)
    • 【编程好习惯】引入中间变量使程序更易读
    • 在C++中通过模板规避潜在错误
    • 在C++中通过模板去除强制转换
    • 【编程好习惯】减少搜索头文件的目录数
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1