二叉树层序遍历(C语言)[通俗易懂]

二叉树层序遍历(C语言)[通俗易懂]二叉树的层序遍历即从上到下,在每一层从左到右依次打印数据。如下:层序遍历结果:ABCDEFG基本思路即将根节点入队后,之后每次都将队首元素出队,打印队首元素数据,并将队首元素左右子树入队,一直重复上述过程。自然,本题还可以用数组来实现。代码:#include<stdio.h>#include<stdlib.h>#defineQueueMax100typedefstructNode{chardata;structNode*

大家好,又见面了,我是你们的朋友全栈君。

二叉树的层序遍历即从上到下,在每一层从左到右依次打印数据。

如下:
在这里插入图片描述
层序遍历结果:
ABCDEFG

基本思路即将根节点入队后,之后每次都将队首元素出队,打印队首元素数据,并将队首元素左右子树入队,一直重复上述过程。

自然,本题还可以用数组来实现。

代码:

#include <stdio.h>
#include <stdlib.h>
#define QueueMax 100

typedef struct Node
{ 
   
    char data;
    struct Node *LChild, *RChild;
}BiNode, *BiTree;

typedef struct
{ 
   
    BiTree data[QueueMax];
    int head;
    int rear;
    int len;
}Queue;

BiTree CreateTree();  //建立二叉树
Queue InitQueue();  //初始化队列
int IsEmptyQueue(Queue seq);  //队列判空
int IsFullQueue(Queue seq);   //队列判满
void PushQueue(Queue *seq, BiTree T);  //入队
void PopQueue(Queue *seq, BiTree *T);  //出队
void LayerOrder(BiTree T);  //层序遍历

int main()
{ 
   
    BiTree T;
    T = CreateTree();
    LayerOrder(T);
    return 0;
}

BiTree CreateTree()
{ 
     //建立二叉树
    char c;
    c = getchar();
    BiTree T;
    if (c == '#') { 
   
        return NULL;
    }
    T = (BiTree) malloc (sizeof(BiNode));
    T->data = c;
    T->LChild = CreateTree();
    T->RChild = CreateTree();
    return T;
}

Queue InitQueue()
{ 
     //初始化队列
    Queue seq;
    for(int i = 0; i < QueueMax; i++) { 
   
        seq.data[i] = NULL;
    }
    seq.head = 0;
    seq.rear = -1;
    seq.len = 0;
    return seq;
}

int IsEmptyQueue(Queue seq)
{ 
     //队列判空
    if (seq.len == 0) { 
   
        return 1;
    }
    return 0;
}

int IsFullQueue(Queue seq)
{ 
     //队列判满
    if (seq.len == QueueMax) { 
   
        return 1;
    }
    return 0;
}

void PushQueue(Queue *seq, BiTree T)
{ 
     //入队
    if (IsFullQueue(*seq)) { 
   
        printf("ErrorFull");
        return;
    }
    seq->rear = (seq->rear + 1) % QueueMax;
    seq->len++;
    seq->data[seq->rear] = T;
}

void PopQueue(Queue *seq, BiTree *T)
{ 
     //出队
    if (IsEmptyQueue(*seq)) { 
   
        printf("ErrorEmpty");
        return;
    }
    seq->head = (seq->head + 1) % QueueMax;
    *T = seq->data[seq->head];
    seq->len--;
}

void LayerOrder(BiTree T)
{ 
     //层序遍历
    Queue seq;
    seq = InitQueue();
    BiTree tmp;
    tmp = T;
    PushQueue(&seq, tmp);
    while(!IsEmptyQueue(seq)) { 
   
        printf("%c", tmp->data);
        if (tmp->LChild != NULL) { 
   
            PushQueue(&seq, tmp->LChild);
        }
        if (tmp->RChild != NULL) { 
   
            PushQueue(&seq, tmp->RChild);
        }
        PopQueue(&seq, &tmp);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143231.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 今日最新抗疫数据_Java算法面试题

    今日最新抗疫数据_Java算法面试题腾讯一面试下4月6日挂1自我介绍2介绍一下你在项目中的承担的任务3你对哪种语言熟悉4线程池使用过吧,说说线程池中有哪些关键字具体使用方法。5说说hashMap使用的是哪种数据结构,6说说hashMap和ConcurrentHashMap的区别7为啥hashMap是线程不安全的?8锁机制怎么使用的?9如何查看linux内存占……

    2025年5月25日
    3
  • 世纪之战:Python和Java,到底学哪个更好?

    世纪之战:Python和Java,到底学哪个更好?零基础自学java,点击了解:https://how2j.cn本文章转载自(如有侵权联系我删除):微信公众号Java技术栈有人曾经将编程比作做菜,那编程语言就是首先要准备的食材或厨具。尽管在刚开始开发AI时,有很多编程语言都可以满足你的需求,但没有一种编程语言是可以一站式解决AI编程的问题,因为在每一个项目中,不同的目标需要特定的方法。和做菜时的精挑细选一样,在成为一个「高手」…

    2022年7月7日
    19
  • java arraydeque poll,Java ArrayDeque「建议收藏」

    java arraydeque poll,Java ArrayDeque「建议收藏」Queue是什么Queue是具有队列特性的接口Queue具有先进先出的特点Queue所有新元素都插入队列的末尾,移除元素都移除队列的头部publicinterfaceQueueextendsCollection{//往队列插入元素,如果出现异常会抛出异常booleanadd(Ee);//往队列插入元素,如果出现异常则返回falsebooleanoffer(Ee);//移除队列元素…

    2022年9月20日
    2
  • 【智能家居篇】wifi在智能家居中的应用

    【智能家居篇】wifi在智能家居中的应用

    2022年2月4日
    35
  • centos7 本地yum源配置_centos官方yum源

    centos7 本地yum源配置_centos官方yum源准备上面三个文件。[root@localhost~]#yuminstall-ylibxml2-python-2.9.1-5.el7_0.1.x86_64.rpm[root@localhost~]#yuminstall-ycreaterepo-0.4.11-3.el5.noarch.rpm使用createrepo–version命令查看是否安装成功,出现…

    2022年8月13日
    5
  • 解决跨域的三种方法_js跨域解决方案

    解决跨域的三种方法_js跨域解决方案解决浏览器跨域访问问题

    2025年6月28日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号