zoukankan      html  css  js  c++  java
  • 16.层次遍历

    代码。

    /*
         层次遍历
     */
    
    #include<iostream>
    #include<cstdlib>
    using namespace std;
    
    typedef char Elemtype;
    typedef struct node
    {
        Elemtype data;
        struct node* left;
        struct node* right;
    }Tree;
    
    
    //先序建立一个树,NULL指针用0代替
    Tree* create_tree(void)
    {
        Tree* root=NULL;
        char ch;
    
        cin>>ch;
        if(ch=='0')
            return NULL;
        else
        {
                root=(Tree*)malloc(sizeof(Tree));
                root->data=ch;
                root->left=create_tree();
                root->right=create_tree();
        }
        return root;
    }
    
    void free_tree(Tree* t)
    {
        if(t)
        {
            free_tree(t->left);
            free_tree(t->right);
            free(t);
            t=NULL;
        }
    }
    
    /*建立队列*/
    #define MAX 100
    typedef struct 
    {
        Tree* data[MAX];
        int front;
        int tail;
    }Queue;
    
    Queue* create_queue(void)
    {
        Queue* q=(Queue*)malloc(sizeof(Queue));
        if(q)
            q->tail=q->front=0;
        else
            cout<<"create queue error"<<endl;
        return q;
    }
    
    int empty_queue(Queue* q)
    {
        if(q->front==q->tail)
            return 1;
        return 0;
    }
    
    int full_queue(Queue* q)
    {
        if((q->tail+1)%MAX==q->front)
            return 1;
        return 0;
    }
    
    void push_queue(Queue* q,Tree* t)
    {
        if(full_queue(q))
            return ;
    
        q->data[q->tail]=t;
        q->tail=(q->tail+1)%MAX;
    }
    
    void pop_queue(Queue* q,Tree** t)
    {
        if(empty_queue(q))
            return;
        *t=q->data[q->front];
        q->front=(q->front+1)%MAX;
    }
    
    void free_queue(Queue* q)
    {
        free(q);
    }
    
    //层次遍历
    void cengci(Tree* t)
    {
        Tree *p=t;
        Queue* q;
    
        q=create_queue();
        push_queue(q,p);
        while(!empty_queue(q))
        {
            pop_queue(q,&p);
            if(p!=NULL)
            {
                cout<<p->data<<" ";
                push_queue(q,p->left);
                push_queue(q,p->right);
            }
        }
        free_queue(q);
        cout<<endl;    
    }
    
    
    int main(void)
    {
        Tree *root;
        root=create_tree();
        
        cengci(root);
        return 0;
    }
  • 相关阅读:
    暑假集训每日一题0716(BFS)
    HDOJ1754(I Hate It)
    POJ2777(Count Color)
    暑假集训每日一题0717(DFS)
    SPOJ7259(Light Switching)
    cocos2dx CCTextureCache
    写给自己——EntryName命名规则
    观XX项目感1
    观XX项目感2 之 软件工程的图纸(再看UML类图)
    游戏编程 && cocos2d 学习
  • 原文地址:https://www.cnblogs.com/buxianghe/p/3210789.html
Copyright © 2011-2022 走看看