随笔 - 147  文章 - 5  评论 - 6  阅读 - 81298

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;
}
复制代码

 

posted on   紫金树下  阅读(203)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示