当前位置: 首页 > news >正文

【数据结构】二叉树的·深度优先遍历(前中后序遍历)and·广度优先(层序遍历)

在这里插入图片描述

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤
📃个人主页 :阿然成长日记 👈点击可跳转
📆 个人专栏: 🔹数据结构与算法🔹C语言进阶
🚩 不能则学,不知则问,耻于问人,决无长进
🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍

文章目录

  • 一、二叉树的深度优先遍历
    • 🌺1.前序遍历
      • (1)`先序遍历`的过程:
      • (2)流程图:
      • (3)代码:
      • (4)测试结果:
    • 🌼2.中序遍历
      • (1)`中序遍历`的过程:
      • (2)代码:
      • (3)测试结果:
    • 🌻3.后序遍历
      • (1) `后序遍历`的过程:
      • (2)代码:
      • (3)测试结果:
  • 二、【广度优先】层序遍历
    • 1.思路及过程:
    • 2.代码
    • 3.测试结果

一、二叉树的深度优先遍历

🌺1.前序遍历

(1)先序遍历的过程:

1.先访问当前节点(即根节点)

2.遍历当前节点的左节点,再同样遍历左子树中的节点

3.遍历完当前节点的左子树后,再去遍历当前节点的右子树,再遍历右子树中的节点

总结先访问根节点,然后遍历左子树,最后遍历右子树;即根左右

(2)流程图:

在这里插入图片描述

(3)代码:

// 二叉树前序遍历 
void BinaryTreePrevOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}printf("%d ", root->_data);BinaryTreePrevOrder(root->_left);BinaryTreePrevOrder(root->_right);
}

(4)测试结果:

1->2->3->NULL->NULL->NULL->4->5->NULL->NULL->6->NULL->NULL

在这里插入图片描述

🌼2.中序遍历

(1)中序遍历的过程:

1.先进入当前节点的左子树,以同样的步骤遍历左子树的节点

2.访问当前节点

3.最后进入到当前节点的右子树,以同样的步骤遍历右子树中的节点

总结先遍历左子树,再访问根节点,最后遍历右子树,即 左根右

(2)代码:


// 二叉树中序遍历
void BinaryTreeInOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}BinaryTreePrevOrder(root->_left);printf("%d ", root->_data);BinaryTreePrevOrder(root->_right);
}

(3)测试结果:

NULL->3->NULL->2->NULL->1->NULL->5->4->NULL->6->NULL

在这里插入图片描述

🌻3.后序遍历

(1) 后序遍历的过程:

1.先进入当前节点的左子树,以同样的步骤遍历左子树中的节点

2.再进入当前节点的右子树,以同样的步骤去遍历右子树中的节点

3.最后遍历此左子树和右子树的父亲节点,也就是该节点

总结先遍历左子树,再遍历右子树,最后访问根节点,即左右根

(2)代码:

// 二叉树后序遍历
void BinaryTreePostOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}BinaryTreePrevOrder(root->_left);BinaryTreePrevOrder(root->_right);printf("%d ", root->_data);
}

(3)测试结果:

NULL->NULL->3->NULL->2->NULL->NULL->5->NULL->NULL->6->4->1
在这里插入图片描述

二、【广度优先】层序遍历

1.思路及过程:

构建一颗二叉树
在这里插入图片描述
1.将root节点1放入队列。
在这里插入图片描述
2.取队列首元素1,并将节点1左右孩子入队
在这里插入图片描述
3.队首元素出队列
在这里插入图片描述
4.取队列首元素2,并将节点2左右孩子入队,由于只有左孩子,所以只用入队一个元素。
在这里插入图片描述
5.队首元素出队列
在这里插入图片描述
6.取队列首元素4,并将节点4左右孩子入队。
在这里插入图片描述
7.队首元素出队列
在这里插入图片描述
8.取队列首元素3,并将节点3左右孩子入队。但是,元素3左右孩子为NULL,因此不用入队。直接执行出队列操作。
在这里插入图片描述
9.取队列首元素5,并将节点5左右孩子入队。但是,元素5左右孩子为NULL,因此不用入队。直接执行出队列操作.
在这里插入图片描述

10.取队列首元素6,并将节点6左右孩子入队。但是,元素6左右孩子为NULL,因此不用入队。直接执行出队列操作。
在这里插入图片描述
11.到此,队列元素已全部出队,层序遍历完成!
结果为:
在这里插入图片描述

2.代码

// 层序遍历
void BinaryTreeLevelOrder(BTNode* root)
{Que q;QueueInit(&q);if (root)QueuePush(&q,root);while (!QueueEmpty(&q)){BTNode* tmp = QueueFront(&q);printf("%d ", tmp->_data);if (tmp->_left){QueuePush(&q,tmp->_left);}if (tmp->_right){QueuePush(&q, tmp->_right);}QueuePop(&q);}printf("\n");QueueDestroy(&q);
}

3.测试结果

在这里插入图片描述

相关文章:

【数据结构】二叉树的·深度优先遍历(前中后序遍历)and·广度优先(层序遍历)

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...

优彩云采集器下载-免费优彩云采集器下载地址

免费优彩云采集器。您是否曾为了数据采集而感到头疼不已?是否一直在寻找一种能够轻松、高效地获取所需数据的方法?别着急,让我们一起来了解如何通过优彩云采集器解决这些问题,从而让您产生购买的欲望。 免费全自动采集发布批量管理…...

【Python】OJ 常用函数

这里写目录标题 一. math1. 求阶乘 - factorial()2. 绝对值 - fabs() 二. 容器的方法1. reverse() 三. Python 内置函数1. sort() 一. math 需要引入 math 包:import math 1. 求阶乘 - factorial() import math print(math.factorial(5))--------运行结果-------…...

【Vue】上万个字把事件处理讲解的淋漓尽致

hello,我是小索奇,精心制作的Vue系列教程持续更新哈,想要学习&巩固&避坑就一起学习吧~ 事件处理 事件的基本用法 重点内容 使用v-on:xxx缩写xxx绑定事件,其中 xxx 是事件名(回顾:v-bind缩写为冒号…...

Remmina中VNC、SSH和RDP的区别

Remmina 可以在 Linux 系统上对远程进行连接。它支持多种远程连接协议,包括 VNC(Virtual Network Computing)、SSH(Secure Shell)和 RDP(Remote Desktop Protocol)。这些协议用于实现不同类型的…...

Spring Boot实现web.xml功能

Spring Boot实现web.xml功能 1. 基于注解实现1.1 组件注册1.2 WebInitParam注解 2. 基于编码实现2.1 Servlet & Filter2.2 Listener 3. 总结 在Spring Boot中,不再需要使用传统的 web.xml 文件来配置web应用的功能,Spring Boot支持通过注解和基于代码…...

陆拾捌- 如何通过数据影响决策(三)

一、如何正确的引导别人? 引导与误导的区别是什么? 看下面这广告图 单看上面大字的结果,感觉好像真的使用过的人均觉得有好处 可如果我们看下面的细字 对111位连续14天食用(本产品)的燕麦片非重度使用者所做调研… 从…...

VMware 三种网络连接模式

VMware虚拟机的三种网络连接模式:桥接,NAT,仅主机。 网卡vmnet0,vmnet1,vmnet8区别。 在VMware中,虚拟机的网络连接主要是由VMware创建的虚拟交换机负责实现的,VMware可以根据需要创建多个虚拟网络。 VMware的虚拟网…...

Scikit-Learn快速生成分类数据集

假如你学习了新的分类算法并想进一步探索研究、尝试不同的超参数评估模型性能,但问题是你找不到好的数据集用于实验。幸运的是Scikit-Learn 提供的 make_classification() 方法可以创建不同类型的数据集,它可以生成不同类型的数据集:二分类、…...

西门子 S7 协议解析

目录 1 建立连接 2 读数据 3 写数据 1 建立连接 03 00 00 16 11 E0 00 00 00 01 00 C1 02 10 00 C2 02 03 01 C0 01 0A (第一次握手报文) 03 00 报文头 00 16 数据总长度:22 11 E0 00 00 00 01 00 C1 02 10 00 C2 02 03 01 C0 01 0A 报文结束…...

一、python解题——求序列最长递增

解题代码: import os import sys# 请在此输入您的代码 n int(input()) a list(map(int, input().split())) # 创建一个初始元素全为1的列表,用来存放每个递增序列的长度 b [1 for x in range(0, n)] # 设置num,用来控制b列表的下标 num …...

【Java 基础篇】Java线程:volatile关键字与原子操作详解

在多线程编程中,确保线程之间的可见性和数据一致性是非常重要的。Java中提供了volatile关键字和原子操作机制,用于解决这些问题。本文将深入讨论volatile关键字和原子操作的用法,以及它们在多线程编程中的重要性和注意事项。 volatile关键字…...

992. K 个不同整数的子数组

992. K 个不同整数的子数组 给定一个正整数数组 nums和一个整数 k,返回 nums 中 「好子数组」 的数目。 如果 nums 的某个子数组中不同整数的个数恰好为 k,则称 nums 的这个连续、不一定不同的子数组为 「好子数组 」。 例如,[1,2,3,1,2] 中…...

Vue 使用vue-cli构建SPA项目(超详细)

目录 一、什么是vue-cli 二,构建SPA项目 三、 运行SPA项目 前言: 在我们搭建SPA项目时候,我们必须去检查我们是否搭建好NodeJS环境 cmd窗口输入以下指令:去检查 node -v npm -v 一、什么是vue-cli Vue CLI(Vu…...

SpringBoot工程模板

spring脚手架&#xff1a;https://start.spring.io/ <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocati…...

学习SLAM:SLAM进阶(十)暴力更改ROS中的PCL库

话不多说&#xff0c;上活 1.1 为什么要这么做 项目中有依赖。。。。 1.2 安装VTK7.1.1 PCL1.8.0 略 1.3 移植到ROS 删除ROS依赖的vtk6.2和PCL1.8.0的动态链接库&#xff1a; liugongweiubuntu:~$ sudo mv /usr/lib/x86_64-linux-gnu/libvtk* Desktop/lib/ [sudo] password fo…...

js 事件流、事件冒泡、事件捕获、阻止事件的传播

事件流 js 事件的执行过程分为捕获阶段&#xff08;由外层节点传播到内层节点&#xff09;和冒泡阶段&#xff08;由内层节点传播到外层节点&#xff09;&#xff0c;即先执行捕获阶段的代码&#xff0c;后执行冒泡阶段的代码 事件冒泡 js 事件中的代码默认在冒泡阶段执行&…...

一家美国公司被黑,一个拉美国家政务服务瘫痪

政务系统承包商遭勒索攻击&#xff0c;导致哥伦比亚国家政务服务陷入瘫痪。 据报道&#xff0c;9月19日哥伦比亚的多个重要政府部门正在应对一次勒索软件攻击&#xff0c;官员们被迫大幅变更部门运作方式。 哥伦比亚卫生和社会保护部、司法部门、工商监管部门上周宣布&#x…...

c++ QT 十八位时间戳转换

先说一下UTC&#xff1a; 它是协调世界时间&#xff0c;又称世界统一时间、世界标准时间、国际协调时间&#xff0c;简称UTC UTC时间与本地时间关系&#xff1a;UTC 时间差本地时间 如果UTC时间是 2015-05-01 00:00:00 那么北京时间就是 2015-05-01 08:00:00 解释&#xff1a;…...

全国职业技能大赛云计算--高职组赛题卷④(容器云)

全国职业技能大赛云计算--高职组赛题卷④&#xff08;容器云&#xff09; 第二场次题目&#xff1a;容器云平台部署与运维任务1 Docker CE及私有仓库安装任务&#xff08;5分&#xff09;任务2 基于容器的web应用系统部署任务&#xff08;15分&#xff09;任务3 基于容器的持续…...

FPGA数学库设计:从定点数、CORDIC到AXI-Stream的硬件算法实现

1. 项目概述&#xff1a;为什么我们需要一个FPGA数学库&#xff1f;如果你在FPGA开发中做过信号处理、图像算法或者任何需要复杂数学运算的设计&#xff0c;大概率会面临一个共同的困境&#xff1a;如何高效、可靠地实现那些看似基础的数学函数&#xff1f;比如&#xff0c;计算…...

Spring循环依赖与三级缓存:从原理到实战,彻底搞懂不踩坑

“Bean正在创建中&#xff0c;存在无法解决的循环引用”——这就是Spring循环依赖的典型表现。很多人只知道“用Lazy注解能解决”“改Set注入就行”&#xff0c;但背后的三级缓存机制却一知半解。一、什么是Spring循环依赖&#xff1f; 循环依赖&#xff0c;本质就是两个或多个…...

DeepSeek-R1 MoE架构逆向工程报告(基于HuggingFace源码+NCCL trace分析):专家粒度、FFN维度与token路由热力图首次披露

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;DeepSeek-R1 MoE架构逆向工程总览 DeepSeek-R1 是一款基于稀疏混合专家&#xff08;Mixture of Experts, MoE&#xff09;架构的大语言模型&#xff0c;其推理与训练行为在公开文档中未完全披露。本章聚焦于通…...

终极指南:如何用天津大学LaTeX论文模板彻底告别格式烦恼

终极指南&#xff1a;如何用天津大学LaTeX论文模板彻底告别格式烦恼 【免费下载链接】TJUThesisLatexTemplate LaTeX templates for TJU graduate thesis. Originally forked from code.google.com/p/tjuthesis 项目地址: https://gitcode.com/gh_mirrors/tj/TJUThesisLatexT…...

革命性AI背景移除:obs-backgroundremoval实现零绿幕专业级虚拟背景

革命性AI背景移除&#xff1a;obs-backgroundremoval实现零绿幕专业级虚拟背景 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地…...

鸣潮模组全面指南:解锁15项游戏增强功能

鸣潮模组全面指南&#xff1a;解锁15项游戏增强功能 【免费下载链接】wuwa-mod Wuthering Waves pak mods 项目地址: https://gitcode.com/GitHub_Trending/wu/wuwa-mod 还在为《鸣潮》中的技能冷却时间烦恼吗&#xff1f;或者觉得游戏中的资源收集过于繁琐&#xff1f;…...

AUTOSAR Ea模块深度剖析:从原理到实战的EEPROM抽象层配置与优化

1. 项目概述&#xff1a;为什么我们需要深入理解Ea模块&#xff1f;在AUTOSAR的软件架构里&#xff0c;NVRAM管理器&#xff08;NvM&#xff09;负责非易失性数据的抽象管理&#xff0c;而Ea&#xff08;EEPROM Abstraction&#xff0c;EEPROM抽象&#xff09;模块&#xff0c;…...

DeepSeek SSO权限同步失效深度复盘(附完整日志追踪链路图)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek SSO权限同步失效深度复盘&#xff08;附完整日志追踪链路图&#xff09; 问题现象与影响范围 2024年10月17日 02:48 UTC&#xff0c;DeepSeek内部SSO系统&#xff08;基于Keycloak 22.0.5&am…...

实战手册:三小时精通waifu2x-caffe深度图像修复技术

实战手册&#xff1a;三小时精通waifu2x-caffe深度图像修复技术 【免费下载链接】waifu2x-caffe waifu2xのCaffe版 项目地址: https://gitcode.com/gh_mirrors/wa/waifu2x-caffe 你是否曾经面对一张低分辨率的老照片&#xff0c;渴望能看清其中的每一个细节&#xff1f;…...

基于8ms平台的嵌入式GUI开发实践:智能家居86盒UI设计与实现

1. 项目概述&#xff1a;当智能家居遇上8ms&#xff0c;一个86盒的UI革命 最近在折腾一个智能家居的改造项目&#xff0c;核心是想把家里那些老旧的开关面板&#xff0c;换成能联网、能自定义、还能显示点信息的“智能大脑”。市面上现成的智能开关要么功能固化&#xff0c;要么…...