Chinaunix首页 | 论坛 | 博客
  • 博客访问: 38567
  • 博文数量: 64
  • 博客积分: 2640
  • 博客等级: 少校
  • 技术积分: 670
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-26 13:15
文章分类
文章存档

2010年(64)

我的朋友
最近访客

分类: C/C++

2010-01-26 13:43:19

 2008-10-02 13:26


#include<iostream>
using namespace std;
struct node{
       int data;
       node* leftchild;
       node* rightchild;
};
struct member{
       node* data;
       member* next;
};
class Queue{
      public:
      void EnQueue(node* n);
      void DeQueue();
      node* GetHead();
      bool Is_empty();
      Queue();
      private:
      member *front,*rear;
};
class BST{
      public:
      BST();
      void Insert(int i);
      void Order();
      private:
      node* root;
      void Insert(node* &n,int i);
};
int main(void){
    BST a;
    int n;
   
    cin>>n;
    while(n!=-1){
          a.Insert(n);
          cin>>n;
     }
   
    a.Order();
    system("pause");
   
    return 0;
}
Queue::Queue(){
       front = rear = 0;
}
void Queue::EnQueue(node* n){
     if(!front){
        front = new member;
        front->data = n;
        front->next = 0;
        rear = front;
        return;
     }
     member* newr = new member;
     newr->data = n;
     newr->next = 0;
     rear->next = newr;
     rear = newr;
}
node* Queue::GetHead(){
      if(!front){
          cout<<"Queue Empty!";
          system("pause");
          exit(0);
      }
      return front->data;
}
void Queue::DeQueue(){
     if(!front){
          cout<<"Queue Empty!";
          system("pause");
          exit(0);
     }
     if(front==rear){
        delete front;
        front = 0;
        return;
     }
     member* p = front;
     front = front->next;
     delete p;
}
    
bool Queue::Is_empty(){
     return front==0;
}
             
BST::BST(){
     root = 0;
}
void BST::Insert(node* &n,int i){
     if(!n){
        n = new node;
        n->data = i;
        n->leftchild = n->rightchild = 0;
        return;
     }
     if(n->data>=i) Insert(n->leftchild,i);
     else Insert(n->rightchild,i);
}
void BST::Insert(int i){
     Insert(root,i);
}
void BST::Order(){
     node* p = root;
     Queue q;
     q.EnQueue(p);
     while(!q.Is_empty()){
           p = q.GetHead();
           q.DeQueue();
           cout<<p->data<<" ";
           if(p->leftchild) q.EnQueue(p->leftchild);
           if(p->rightchild) q.EnQueue(p->rightchild);
     }
     cout<<endl;
}


阅读(232) | 评论(0) | 转发(0) |
0

上一篇:拓扑排序

下一篇:n*n数字旋转输出

给主人留下些什么吧!~~