二叉树遍历——层序遍历

article/2025/9/18 19:47:49

目录

1.什么是层序遍历?

2.实现思路

3.代码实现


1.什么是层序遍历?

就是将一颗树按照每一层每一层的方式进行遍历

例如这棵树,进行层序遍历的结果应该是

那么我们该怎样去实现呢?

2.实现思路

利用队列先进先出的思想去实现

重要思想:一层带一层

我们先把书的根节点入进去,然后每出一次都把它的子节点入队,出子节点时也一样

 

3.代码实现

因为我们用的是c来实现,所以在实现前请准备好一个队列

队列头文件

#pragma once#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>struct rootnode;
typedef struct rootnode* datatype;typedef struct Queen
{struct Queen* next;datatype data;
}Queen;typedef struct Q
{Queen* head;Queen* tail;
}Q;void QueenInit(Q* ps);void Queenpush(Q* ps, datatype x);
void Queenpop(Q* ps);bool Queenempty(Q* ps);datatype Queenfront(Q* ps);

队列的实现

#include "Queen.h"void QueenInit(Q* ps)
{ps->head = ps->tail = NULL;
}void Queenpush(Q* ps, datatype x)
{Queen* newnode = (Queen*)malloc(sizeof(Queen));newnode->data = x;newnode->next = NULL;if (ps->head == NULL){ps->head = newnode;ps->tail = newnode;}else{ps->tail->next = newnode;ps->tail = newnode;}
}void Queenpop(Q* ps)
{assert(ps);assert(ps->head);if (ps->head->next == NULL){free(ps->head);ps->head = NULL;}else{Queen* next = ps->head->next;free(ps->head);ps->head = next;}
}bool Queenempty(Q* ps)
{assert(ps);return ps->head == NULL;
}datatype Queenfront(Q* ps)
{assert(ps);return ps->head->data;
}

有了队列之后我们来实现层序遍历

void Level_order(root* p)
{Q q;//创建队列QueenInit(&q);//实现队列的初始化if (p)//如果根不为空,先入根Queenpush(&q, p);while (!Queenempty(&q))//如果此时队列不为空,进行循环{root* front = Queenfront(&q);//取出队列的头Queenpop(&q);printf("%c", front->data);//打印if (front->left)//如果此时结点的左子数不为空则入{Queenpush(&q, front->left);}if (front->right)//如果此时结点的右子数不为空则入{Queenpush(&q, front->right);}}
}


http://chatgpt.dhexx.cn/article/0vXFIbMG.shtml

相关文章

【二叉树 Java】二叉树的层序遍历

一、层序遍历定义&#xff1a; 按照每层进行遍历&#xff0c;从左至右&#xff0c;从上至下遍历树的节点&#xff0c;如下图所示 二、题目描述&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所…

二叉树----层序遍历

1.层序遍历 层序遍历:层序遍历即逐层按顺序遍历二叉树的各个节点,故层序遍历又叫广度优先遍历. 如图:广度优先遍历即按ABCDEFGH的顺序遍历 2.解题思路 1.这里我们利用队列先进先出的结构特点,当我们在队列中弹出一个树的节点时,我们便把树的左孩子和右孩子入到队列之中.(如果父…

二叉树的层序遍历

二叉树的层序遍历 1.层序遍历2.实例2.1二叉树的层序遍历2.2 二叉树的层序遍历 II2.3 二叉树的右视图2.4 二叉树的层平均值2.5 N叉树的层序遍历2.6在每个树行中找最大值2.7二叉树的最大深度2.8二叉树的最小深度2.9翻转二叉树2.10完全二叉树的节点个数2.11左叶子之和2.11找树左下…

二叉树的遍历——层序遍历

一、之前写了二叉树的三种遍历方法&#xff1a;有先序遍历、中序遍历、后序遍历&#xff0c;这三种方法都是用递归的方式来遍历二叉树的。层序遍历则不是使用递归来遍历&#xff0c;而是使用队列的来实现遍历&#xff1a; void LevelTreeOrder(BTNode* root) {Queue q;QueueIni…

【机器学习】LDA算法 (主题模型算法)

随着互联网的发展&#xff0c;文本分析越来越受到重视。由于文本格式的复杂性&#xff0c;人们往往很难直接利用文本进行分析。因此一些将文本数值化的方法就出现了。LDA就是其中一种很NB的方法。 LDA有着很完美的理论支撑&#xff0c;而且有着维度小等一系列优点。本文对LDA算…

LDA算法和PCA算法的总结(原理和思想)

LDA和PCA的对比(并没有公式推导&#xff0c;改日会写) 先补一补数学(不需要)&#xff1a; 方差——概率论和统计方差衡量随机变量或一组数据时离散程度的度量&#xff1b;概率论中方差用来度量随机变量和其数学期望之间的偏离程度。统计中的方差&#xff08;样本方差&#xff…

LDA算法原理及LDA与PCA的比较

1. LDA算法简介 LDA&#xff08;线性判别式分析 Linear Discriminant Analysis&#xff09;属于机器学习中的监督学习算法&#xff0c;常用来做特征提取、数据降维和任务分类。在人脸识别、人脸检测等领域发挥重要作用。LDA算法与PCA算法都是常用的降维技术。二者的区别在于&a…

LDA算法调研报告

LDA算法调研报告 1、LDA算法概述 本文所阐述的LDA算法全称为Latent Dirichlet Allocation&#xff08;网上没有标准的中文名称&#xff0c;我称之为潜在狄利克雷分配算法&#xff09;&#xff0c;不是线性判别分析算法&#xff08;Linear Discriminant Analysis&#xff09;。L…

【机器学习】LDA算法原理

问题 线性判别分析(Linear Discriminant Analysis,LDA)是机器学习中常用的降维方法之一,本文旨在介绍LDA算法的思想,其数学推导过程可能会稍作简化。 LDA的思想 ● LDA是一种线性的、有监督的降维方法,即每个样本都有对应的类别标签(这点和PCA不同)。 ● 主要思想:…

Spark机器学习-LDA算法09

LDA算法 LDA即文档主题生成模型,该算法是一种无监督学习 将主题对应聚类中心,文档作为样本,则LDA也是一种聚类算法 该算法用来将多个文档划分为K个主题,与Kmeans类似 LDA是一种基于概率统计的生成算法 LDA算法—种常用的主题模型,可以对文档主题进行聚类,同样也可以用…

LDA算法实现鸢尾花数据集降维

目录 1. 作者介绍2. LDA降维算法2.1 基本概念2.2 算法流程 3. LDA算法实现3.1 数据集介绍3.2 代码实现3.3 结果展示 1. 作者介绍 唐杰&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2022级研究生 研究方向&#xff1a;机器视觉与人工智能 电子邮件&#xff…

秒懂---LDA算法

线性判别分析LDA原理总结 在主成分分析&#xff08;PCA&#xff09;原理总结中&#xff0c;我们对降维算法PCA做了总结。这里我们就对另外一种经典的降维方法线性判别分析&#xff08;Linear Discriminant Analysis, 以下简称LDA&#xff09;做一个总结。LDA在模式识别领域&…

基于Sklearn实现LDA算法

文章目录 一、LDA算法二、sklearn实现LDA三、结果如图四、总结五、参考 一、LDA算法 1.线性判别分析&#xff08;Linear Discriminant Analysis, LDA&#xff09;方法常被用于数据预处理中的降维&#xff08;dimensionality reduction&#xff09;步骤。LDA在保证良好的类别区…

LDA算法推导

LDA算法是什么 简单地说LDA算法就是向低维度投影&#xff0c;让同一类别数据投影点更接近&#xff0c;不同类别数据点距离更远。 LDA原理 定义&#xff0c;已知 我们要把两类数据都投影到w直线上。 让不同类别的数据的类别中心之间的距离尽可能的大&#xff0c; 同一种类别数…

线性判别分析LDA原理总结

转自http://www.cnblogs.com/pinard/p/6244265.html 在主成分分析&#xff08;PCA&#xff09;原理总结中&#xff0c;我们对降维算法PCA做了总结。这里我们就对另外一种经典的降维方法线性判别分析&#xff08;Linear Discriminant Analysis, 以下简称LDA&#xff09;做一个总…

线性判别分析(Linear Discriminant Analysis, LDA)算法分析

LDA算法入门 一. LDA算法概述: 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD),是模式识别的经典算法,它是在1996年由Belhumeur引入模式识别和人工智能领域的。性鉴别分析的基本思想是将高维的模式样本投影到…

机器学习笔记17-LDA算法

1. LDA算法简介 LDA&#xff08;线性判别式分析 Linear Discriminant Analysis&#xff09;属于机器学习中的监督学习算法&#xff0c;常用来做特征提取、数据降维和任务分类。在人脸识别、人脸检测等领域发挥重要作用。LDA算法与PCA算法都是常用的降维技术。二者的区别在于&a…

数据结构层次遍历二叉树

2022.11.19 计算二叉树的深度和节点个数 任务描述相关知识编程要求测试说明C/C代码 任务描述 本关任务&#xff1a;给定一棵二叉树&#xff0c;借助队列实现层次遍历二叉树。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.队列基本操作&#xff0c;2.二叉…

树的层次遍历

二叉树的前序、中序、后序遍历我想大家应该都很熟悉了&#xff0c;那我们今天就来讲一下二叉树的层次遍历。 二叉树的前序、中序、后序遍历需要用到栈&#xff08;递归的过程也就是一个栈&#xff09;&#xff0c;层次遍历需要借助队列这个数据结构。 层次遍历的思路 我们给…