论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

二叉树的操作

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:45:33


//二叉树的建立‘先序遍历’中序‘后序遍历
#include<iostream.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct BinaryTree{
 ElemType data;
 struct BinaryTree *lchild, *rchild;
};

void CreatBiTree (BinaryTree *BT) //按先序遍历二叉树
{
 cout<<"\nInput datas to creat binarytree, use ^ to ned, use Enter to device two datas!"<<endl;
 char ch;
 cin>>ch;
 if(ch=='^') BT=NULL;
 else{
  BT=(BinaryTree*)malloc(sizoef(BinaryTree));
  if(!BT) Error("Fail to malloc space!");
  BT->data=ch;
  CreatBiTree(BT->lchild);
  CreatBiTree(BT->rchild);
      }
}

//二叉树的遍历 
void TraverBiTree(BinaryTree *BT,int mark)
{
 switch(mark)
 {
  case 1:  //先序遍历
   if(BT!=NULL)
   {cout<<BT->data<<" ";
   TraverBiTree(BT->lchild,mark);
   TraverBiTree(BT->rchild,mark);
   }//if
  case 2:  //中序遍历 
   if(BT!=NULL){
    TraverBiTree(BT->lchild,mark);
    cout<<BT->data<<" ";
    TraverBiTree(BT->rchild,mark);
    }//if
  case 3:  //后序遍历
   if(BT!=NULL){
    TraverBiTree(BT->lchild,mark);
    TraverBiTree(BT->rchild,mark);
    cout<<BT->data<<" ";
    }//if
  case 4:  //按层次遍历
   const MaxLength=30;
   BinaryTree *Q[MaxLength]; //定义存储二叉树结点指针的数组空间作为队列用
   int front=0,rear=0,
   BinaryTree *p;
   if(BT!=NULL){
   rear=(rear+1)%MaxLength ; //队尾指针后移
   Q[rear]=BT;
   }//if
   while(front!=rear)
   {
    front=(front+1)%Maxlength;
    p=Q[front];
    cout<<p->data<<" ";
    if(p->lchild!=NULL)
    { rear=rear+1)%MaxLength;
     Q[rear]=p->lchild;
    }//if
    if(p->rchild!=NULL)
    {
     rear=(rear+1)%MaxLength;
     Q[rear]=p->rchild;
    }//if
   }
  default:
   cerr<<"\nmark is out of range! fail to traverBiTree!"<<endl;
   getch();
   exit(1);
   }
}

void Error(char *ms)
{
 cout<<*ms<<endl;
 exit(1);
}

void main()
{
 BinaryTree *BT;
 //int mark,i,j;
 //ElemType elem;
 int flag1, flag2;
 cout<<"\nThis is a BinaryTree : 1: Creat Binary Tree  2:Traver binary tree
 cin>>flag1;
 switch(flag1)
 {
  case 1:
   CreatBiTree(BT);
   break;
  case 2:
   int flag;
   cout<<"\n1:preorder creat  2: In Order Treaver 3: Post Order Traver 
    4: levels Order Traver"<<endl;
   cin>>flag;
   if(flag==1)
    TraverBiTree(BT,1); //先序遍历
   else if(flag==2)
    TraverBiTree(BT,2); //中序遍历
   else if(flag==3)
    TraverBiTree(BT,3); //后序遍历
   else if(flag==4)
    TraverBiTree(BT,4); //按层次遍历
   else
    cout<<"\nYou must select 1-4"<<endl;
   break;
  defualt:
   cout<<"\nYou must select 1-2"<<endl;
   break;
 }
}

上一篇:{应用}迷宫探路 人气:5678
下一篇:{应用}图形的广度优先遍历 人气:6744
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058