返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言二叉树层序遍历
  • 818
分享到

C语言二叉树层序遍历

2024-04-02 19:04:59 818人浏览 八月长安
摘要

实现下面图中的二叉树层序遍历 #include <stdio.h> #include <stdlib.h> #include <stdbool.h&g

实现下面图中的二叉树层序遍历

二叉树层序遍历(C语言)_evel traversal

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>

typedef struct node {
    char data;
    struct node *lchild;
    struct node *rchild;
}NODE, *PNODE;

typedef struct qnode {
    PNODE pnode;
    struct qnode *next;
}QNODE, *PQNODE;

typedef struct queue {
    PQNODE front;
    PQNODE rear;
    int size;
}QUEUE, *PQUEUE;

PNODE CreateTree(void);
void initQueue(PQUEUE);
void enQueue(PQUEUE, PNODE);
bool deQueue(PQUEUE, PNODE *);
void levelTraversal(PNODE);

PNODE CreateTree(void)
{
    PNODE pA = (PNODE)malloc(sizeof(NODE));
    PNODE pB = (PNODE)malloc(sizeof(NODE));
    PNODE pC = (PNODE)malloc(sizeof(NODE));
    PNODE pD = (PNODE)malloc(sizeof(NODE));
    PNODE pE = (PNODE)malloc(sizeof(NODE));
    PNODE pF = (PNODE)malloc(sizeof(NODE));
    PNODE pG = (PNODE)malloc(sizeof(NODE));

    pA->data = 'A';
    pB->data = 'B';
    pC->data = 'C';
    pD->data = 'D';
    pE->data = 'E';

    pA->lchild = pB;
    pA->rchild = pC;
    pB->lchild = pB->rchild = NULL;
    pC->lchild = pD;
    pC->rchild = NULL;
    pD->lchild = NULL;
    pD->rchild = pE;
    pE->lchild = pE->rchild = NULL;

    return pA;
}

void initQueue(PQUEUE pQ) {
    pQ->front = pQ->rear = (PQNODE)malloc(sizeof(QNODE));
    if (! pQ->front) {
        printf("init malloc error!\n");
        exit(-1);
    }
    pQ->front->next = NULL;
    pQ->size = 0;
}

void enQueue(PQUEUE pQ, PNODE pnode) {
    //printf("en_queue %c ", pnode->data);
    PQNODE pNew;
    pNew = (PQNODE)malloc(sizeof(QNODE));
    if (!pNew) {
        printf(" en_queue malloc error!\n");
        exit(-1);
    }
    pNew->pnode = pnode;
    pNew->next = NULL;

    pQ->rear->next = pNew;
    pQ->rear = pNew;
    pQ->size++;
    //printf(" success.\n");
}
bool deQueue(PQUEUE pQ, PNODE *ppnode) {
    //printf("de_queue...");
    PQNODE tmp;

    if (pQ->front->next == NULL) {
        printf(" failed, queue empty!\n");
        return false;
    }

    tmp = pQ->front->next;
    *ppnode = tmp->pnode;

    pQ->front->next = tmp->next;
    // 最后一个节点出队特殊处理
    if (tmp->next == NULL)
        pQ->rear = pQ->front;
    free(tmp);
    pQ->size--;
    //printf("success, value: %c\n", (*ppnode)->data);
    return true;
}

void levelTraversal(PNODE pnode){
    if (pnode) {
        QUEUE Q;
        PNODE tmp;
        initQueue(&Q);
        enQueue(&Q, pnode);
        int levelSize, level;
        level = 0;
        while (Q.size) {
            sleep(1);
            level++;
            levelSize = Q.size;
            printf("traversal level %d have %d nodes:", level, levelSize);
            for (int i=0; i<levelSize; i++) {
                deQueue(&Q, &tmp);
                printf(" %c,", tmp->data);
                if (tmp->lchild)
                    enQueue(&Q, tmp->lchild);
                if (tmp->rchild)
                    enQueue(&Q, tmp->rchild);
            }
            printf("\n");
        }
    }
}


int main(void)
{
    PNODE T = CreateTree();
    printf("层序遍历结果:\n");
    levelTraversal(T);

    return 0;
}

output

[root@8be225462e66 c]# GCc level_traversal.c && ./a.out
层序遍历结果:
traversal level 1 have 1 nodes: A,
traversal level 2 have 2 nodes: B, C,
traversal level 3 have 1 nodes: D,
traversal level 4 have 1 nodes: E,

到此这篇关于C语言二叉树层序遍历的文章就介绍到这了,更多相关C语言遍历内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言二叉树层序遍历

本文链接: https://lsjlt.com/news/146471.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言二叉树层序遍历
    实现下面图中的二叉树层序遍历 #include <stdio.h> #include <stdlib.h> #include <stdbool.h&g...
    99+
    2024-04-02
  • 用C++实现二叉树层序遍历
    这篇文章主要讲解了“用C++实现二叉树层序遍历”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“用C++实现二叉树层序遍历”吧!二叉树层序遍历从底部层序遍历其实还是从顶部开始遍历,只不过最后存储...
    99+
    2023-06-20
  • C语言实现二叉树层次遍历介绍
    目录什么是层次遍历?那我们如何来实现这个算法呢?主体代码:总结什么是层次遍历? 对于一颗二叉树来说,从根节点开始,按从上到下、从左到右的顺序访问每一个结点。 注:每一个结点有且访问一...
    99+
    2024-04-02
  • C语言之二叉树的遍历
    目录0.写在前面1.前序遍历步骤详解代码实现2.中序遍历步骤详解代码实现3.后序遍历步骤详解代码实现0.写在前面 认识二叉树结构最简单的方式就是遍历二叉树。所谓遍历二叉树就是按照某种...
    99+
    2023-05-14
    C语言实现二叉树遍历 二叉树遍历
  • C++实现LeetCode(102.二叉树层序遍历)
    [LeetCode] 102. Binary Tree Level Order Traversal 二叉树层序遍历 Given a binary tree, return the&#...
    99+
    2024-04-02
  • C++怎么实现二叉树层序遍历
    本篇内容主要讲解“C++怎么实现二叉树层序遍历”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么实现二叉树层序遍历”吧!二叉树层序遍历Given a binary tree, return...
    99+
    2023-06-20
  • C++二叉树层序遍历实例分析
    今天小编给大家分享一下C++二叉树层序遍历实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。二叉树层序遍历Example...
    99+
    2023-06-19
  • c语言二叉树的前序遍历方法
    这篇文章主要讲解了“c语言二叉树的前序遍历方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c语言二叉树的前序遍历方法”吧!题目给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,nu...
    99+
    2023-06-19
  • JavaScript实现二叉树层序遍历
    目录题目描述示例递归实现代码思路解析图示队列实现代码思路解析题目描述 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例 二叉树:[3...
    99+
    2023-05-14
    JavaScript二叉树遍历 JS遍历 二叉树层序遍历 JS二叉树
  • C++实现LeetCode(107.二叉树层序遍历之二)
    [LeetCode] 107. Binary Tree Level Order Traversal II 二叉树层序遍历之二 Given the root of ...
    99+
    2024-04-02
  • C++实现二叉树层序遍历的方法
    今天小编给大家分享一下C++实现二叉树层序遍历的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。二叉树层序遍历Given ...
    99+
    2023-06-19
  • C语言中二叉树的后序遍历详解
    目录一.二叉树的后序遍历.(递归)二.二叉树的后序遍历(迭代)总结首先我们从两个方面讲解二叉树的后序遍历(递归+迭代) 一.二叉树的后序遍历.(递归) 思想: 首先我们从二叉树的根节...
    99+
    2024-04-02
  • JavaScript如何实现二叉树层序遍历
    今天小编给大家分享一下JavaScript如何实现二叉树层序遍历的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。题目描述给你一...
    99+
    2023-07-05
  • java二叉树层序遍历怎么实现
    在Java中,可以使用队列来实现二叉树的层序遍历。具体步骤如下: 首先创建一个队列,将根节点入队。 进入循环,直到队列为空为...
    99+
    2024-03-15
    java
  • C语言二叉树的遍历示例介绍
         在本算法中先利用先序遍历创建了树,利用了递归的算法使得算法简单,操作容易,本来无printf("%c的左/右子树:", c...
    99+
    2024-04-02
  • c语言二叉树怎么创建与遍历
    在C语言中,可以使用结构体来表示二叉树节点,然后通过递归的方式来创建和遍历二叉树。 首先定义一个结构体表示二叉树节点: struct...
    99+
    2024-04-02
  • 用C++实现二叉树的之字形层序遍历
    这篇文章主要介绍“用C++实现二叉树的之字形层序遍历”,在日常操作中,相信很多人在用C++实现二叉树的之字形层序遍历问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”用C++实现二叉树的之字形层序遍历”的疑惑有所...
    99+
    2023-06-20
  • C++怎么实现二叉树的字形层序遍历
    今天小编给大家分享一下C++怎么实现二叉树的字形层序遍历的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。二叉树的之字形层序遍历...
    99+
    2023-06-19
  • C语言中如何实现二叉树的后序遍历
    小编给大家分享一下C语言中如何实现二叉树的后序遍历,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!首先我们从两个方面讲解二叉树的后序遍历(递归+迭代)一.二叉树的后序遍历.(递归)思想:首先我们从二叉树的根节点开始先遍历其左...
    99+
    2023-06-29
  • C语言数据结构二叉树先序、中序、后序及层次四种遍历
    目录一、图示展示(1)先序遍历(2)中序遍历(3)后序遍历(4)层次遍历(5)口诀二、代码展示一、图示展示 (1)先序遍历 先序遍历可以想象为,一个小人从一棵二叉树根节点为起点,沿着...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作