二叉树层序遍历(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)
上一篇 2022年5月22日 上午7:40
下一篇 2022年5月22日 上午8:00


相关推荐

  • 面试必备:什么是一致性Hash算法?

    面试必备:什么是一致性Hash算法?最近有小伙伴跑过来问什么是 Hash 一致性算法 说面试的时候被问到了 因为不了解 所以就没有回答上 问我有没有相应的学习资料推荐 当时上班 没时间回复 晚上回去了就忘了这件事 今天突然看到这个 加班为大家整理一下什么是 Hash 一致性算法 希望对大家有帮助 文末送书 长按抽奖助手小程序即可参与 祝君好运 经常阅读我文章的小伙伴应该都很熟悉我写文章的套路 上来就是先要问一句为什么 也就是为什么要有 Has

    2026年3月19日
    1
  • linux 的vi命令详解,Linux vi 命令详解

    linux 的vi命令详解,Linux vi 命令详解vi 共分为三种模式 分别是一般模式 编辑模式与命令行模式一般模式 以 vi 打开一个文件就直接了一般模式 这是默认的模式 编辑模式 在指令模式下输入的按键 i I o O a A r R vi 即认为是在当前位置插入字符 而在输入模式下 vi 则把输入的按键当作插入的字符来处理 指令模式切换到输入模式只需键入相应的输入命令即可 如 a A 而要从输入模式切换到指令模式 则需在输入模式下键入

    2026年3月19日
    2
  • 2025年制造业质检最佳AI模型:豆包大模型的适配选择

    2025年制造业质检最佳AI模型:豆包大模型的适配选择

    2026年3月12日
    2
  • 最新Coze(扣子)智能体工作流:一键把Excel转化成各种可视化数据图表,小白也能上手

    最新Coze(扣子)智能体工作流:一键把Excel转化成各种可视化数据图表,小白也能上手

    2026年3月12日
    2
  • word输入矩阵卡死,导致word在试图打开文件时遇到错误

    word输入矩阵卡死,导致word在试图打开文件时遇到错误问题:今天用officeword2019输入一个矩阵的时候,突然卡死了。强制关闭了word。再打开就变成这样了。解决方法:试了网上说的那种,打开文件时选择打开并修复还是不行。最后发给同学看看能不能用wps打开。没想到他打开了。所以,wps牛逼!!…

    2022年5月20日
    51
  • http中的expect

    http中的expect1 http100 continue 用于客户端在发送 POST 数据给服务器前 征询服务器情况 看服务器是否处理 POST 的数据 如果不处理 客户端则不上传 POST 数据 如果处理 则 POST 上传数据 在现实应用中 通过在 POST 大数据时 才会使用 100 continue 协议 2 客户端策略 1 如果客户端有 POST 数据要上传 可以考虑使用 100 continue 协议 加入头 Ex

    2026年3月18日
    1

发表回复

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

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