二叉树层序遍历(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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ExtJs自学教程(1):一切从API開始

    ExtJs自学教程(1):一切从API開始

    2021年12月1日
    40
  • 使用StopWatch计算耗时[通俗易懂]

    使用StopWatch计算耗时[通俗易懂]一、传统计算耗时方式一般采用System.currentTimeMillis()来获取时间,然后打印当前时间与任务开始执行时间的差值。记录开始时间点记录结束时间点输出当前时间与任务开始执行时间的差值代码如下:publicstaticvoidmain(String[]args)throwsInterruptedException{longstartTime=System.currentTimeMillis();//dos

    2022年6月23日
    25
  • JavaScript正则表达式(完整版)

    JavaScript正则表达式(完整版)JavaScript正则表达式1.构建正则表达式字面量创建varreg=/正则表达式/修饰符构造函数创建varreg=newRegExp(‘正则表达式’,’修饰符’)修饰符​ i:ignoreCase,匹配忽视大小写​ m:multiline,多行匹配​ g:global,全局匹配2.正则表达式调用(实例方法)1.exec​ 匹配字符串和正则表达式的方法,​ 匹配成功:​ 返回一个数组[匹配内容,index:匹配的起始位置,

    2022年10月25日
    0
  • 「建议收藏」Pycharm使用教程(非常详细,非常实用)「建议收藏」

    「建议收藏」Pycharm使用教程(非常详细,非常实用)「建议收藏」Pycharm使用教程1、Jetbrains家族和Pycharm版本划分:pycharm是Jetbrains家族中的一个明星产品,Jetbrains开发了许多好用的编辑器,包括Java编辑器(IntelliJIDEA)、JavaScript编辑器(WebStorm)、PHP编辑器(PHPStorm)、Ruby编辑器(RubyMine)、C和C++编辑器(CLion)、.Net编辑器(Rider)、iOS/macOS编辑器(AppCode)等。pycharm现在在官网[https://www.jetb

    2022年8月25日
    4
  • JSF之经常使用注解

    JSF之经常使用注解

    2022年1月22日
    44
  • [新人向]MySQL和Navicat下载、安装及使用详细教程[通俗易懂]

    [新人向]MySQL和Navicat下载、安装及使用详细教程[通俗易懂]MySQL和Navicat下载和安装详细教程因为这些软件的安装很多都是纯英文,作为新手安装真的需要摸索好久,包括我自己,所以Pipi酱就把自己的经验分享给大家~MySQL的安装教程一、下载安装包链接:1.下载MySQL:https://dev.mysql.com/downloads/windows/installer/8.0.html这里我们直接下载第一个(24.4M),下载到任意目录即可。2、安装MySQL二、安装1、这里我们安装点击Yes2、选择Custom,然后Next3、

    2022年5月22日
    40

发表回复

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

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