go数据结构(二叉树的遍历)

news2024/9/21 4:37:03

 

用数组来存储二叉树如何遍历的呢?

如果父节点的数组下表是i,那么它的左孩子就是i * 2 + 1,右孩子就是 i * 2 + 2。

 二叉树的遍历方式:

二叉树有三种基本遍历方式,分别是前序遍历、中序遍历和后序遍历。遍历的原理是从根节点开始,按照特定方式递归遍历左子树和右子树,每次对访问到的节点进行操作。

  • 前序遍历:先访问根节点再访问左子树,最后访问右子树。
  • 中序遍历:先访问左子树再访问根节点,最后访问右子树。
  • 后序遍历:先访问左子树再访问右子树,最后访问根节点

这里前中后,其实指的就是中间节点的遍历顺序,只要记住 前中后序指的就是中间节点的位置就可以了

看如下中间节点的顺序,就可以发现,中间节点的顺序就是所谓的遍历方式

  • 前序遍历:中左右
  • 中序遍历:左中右
  • 后序遍历:左右中

前序遍历

对每颗子树,均遵循根节点–>左节点–>右节点

递归前序

func preShowTree(head *Node) {
	if head == nil {
		return
	}
	fmt.Println(head.V)//第一次来到节点的时候打印
	showTree(head.Left)
	showTree(head.Right)
}

中序遍历

中序:对每颗子树,均遵循左节点–>根节点–>右节点

递归中序

func midShowTree(head *Node) {
	if head == nil {
		return
	}
	showTree(head.Left)
    fmt.Println(head.V)//第二次来到节点的时候打印
	showTree(head.Right)
}

后序遍历

后序:对每颗子树,均遵循左节点–>右节点–>根节点

递归后序

func afterShowTree(head *Node) {
	if head == nil {
		return
	}
	showTree(head.Left)
	showTree(head.Right)
    fmt.Println(head.V)//第三次来到节点的时候打印
}

参考:二叉树入门知识——一篇了解二叉树_我永远信仰的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/432109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jenkins 流水线

采用Jenkins的自由风格构建的项目,适合用于测试和学习,主要问题有: 构建过程中整体流程是不可见的,无法确认每个流程花费的时间出现问题不方便快速的定位无法进行版本化管理多个任务中有很多步骤需要重复搭建 Jenkins的Pipeline…

MYSQL Row 752 was cut by GROUP_CONCAT()

因为group_concat有个最大长度的限制,GROUP_CONCAT函数返回的结果大小被MySQL默认限制为1024(字节)的长度。超过最大长度就会被截断掉 解决方法:更改配置文件,修改长度。 https://blog.csdn.net/zzddada/article/details/115082236 concat…

DHCP与RIP配置实验

目录 一、实验要求与拓扑结构 1、实验要求 2、提前规划好网段的拓扑结构如下图 二、实验步骤 1、给每台路由器的各个接口配置ip 2、给路由器AR1和AR3配置dhcp服务 3、在路由器AR1和AR2上运行ripv2,在AR3上运行ripv1 4、更改接口的rip协议版本 一、实验要求与…

chatglm-6b模型在windows的详细安装教程

1.先是看了github的文章(如果打不开这篇文章,可能需要科学上网,即访问外网的VPN): https://github.com/THUDM/ChatGLM-6B 2.准备:台式机,GPU是8G。(关于是否可以在笔记本运行&#x…

【网路】-- HTTP协议

目录 HTTP协议 认识URL urlencode和urldecode Http http的宏观结构 http请求报文格式 http响应报文格式 HTTP的方法 表单 重定向 HTTP常见Header 会话管理 Cookie 实验证明 Connection选项 工具推荐 Fiddler 原理 应用层:就是程序员基于socket接口…

如何在大厂做好架构演进?

1 架构演进的定义 1.1 定义 通过设计新的系统架构(4R),来应对业务和技术的发展变化。 1.2 关键点 新架构新的复杂度 1.3 目的 应对业务和技术的发展变化后带来新的复杂度。 案例 淘宝去IOE,是因为业务发展大了后,IOE的成本和可控性难…

51单片机入门

文章目录 一、安装keil5及proteus二、MCS-51单片机结构与原理(一).8051单片机基本组成(二).8051单片机引脚1.电源引脚2.时钟电路引脚3.控制信号引脚4.输入/输出端口 (三) 并行输入/输出端口结构 三、单片机cx51编程基础(一).变量定义(二).数据类型(三).存储类型(四).Cx51语言程…

【Python】逆向解析js代码

目录 1. 打开百度翻译网页,查找翻译结果的网络资源包 2. 获取翻译结果网络资源包的url、请求头、请求体,解析json文件数据 3. 观察请求体字段,发现 query 字段便是我们输入的需要翻译的值 4. ctrl F 快捷键搜索sign值的网络资源包&#x…

自然语言处理:词嵌入简介

动动发财的小手,点个赞吧! Word Embeddings 机器学习模型“查看”数据的方式与我们(人类)的方式不同。例如,我们可以轻松理解“我看到一只猫”这一文本,但我们的模型却不能——它们需要特征向量。此类向量或…

MongoDB 聚合管道的集合关联($lookup)及合并($unionWith)

目前为止,我们已经介绍了一部分聚合管道中的管道参数: $match:文档过滤 $group:文档分组,并介绍了分组中的常用操作:$addToSet,$avg,$sum,$min,$max等。 $add…

python OCR识别验证码

1. 抓取网页验证码图像并保存 import lxml.html, urllib3# 使用urllib3抓取网页数据 http urllib3.PoolManager() html http.request(GET,site).data# 使用lxml解析网页数据 tree lxml.html.fromstring(html) # 解析HTML,补全不完整的格式 fixedhtml lxml.ht…

LeetCode:102. 二叉树的层序遍历

🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀算法专栏: 👉🏻123 可以参考👉LeetCode:二叉树的前、中、后序遍历——如何创建一棵【二…

机器学习 特征工程

文章目录 一、数据预处理1. 缺失值处理1.1 删除1.2 统计值填充1.3 前后向值填充1.4 直接忽略1.5 模型预测 2. 异常值处理 二、特征提取1. 数值型特征提取1.1 标准化与缩放1.1.1标准化(Standardization)1.1.2 归一化(Normalization&#xff09…

STM32F4_定时器精讲(TIM)

目录 1. 什么是定时器? 2. STM32定时器简介 2.1 高级控制定时器 TIM1和TIM8 2.1.1 TIM1和TIM8简介 2.1.2 时基单元 2.1.3 计数器模式 2.1.4 重复计数器 2.1.5 时钟选择 2.1.6 捕获/比较通道 2.1.7 输入捕获模式 2.1.8 其他功能 2.2 通用定时器 TIM2到TI…

算法----删点成林

题目 给出二叉树的根节点 root,树上每个节点都有一个不同的值。 如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。 返回森林中的每棵树。你可以按任意顺序组…

2023年天梯赛模拟赛

//能力有限&#xff0c;只展示一百分代码。前八个题一般是原题&#xff0c;所以不展示题目。 L1-1 嫑废话上代码 #include<bits/stdc.h> using namespace std; int main(){cout<<"Talk is cheap. Show me the code.";return 0; } L1-2 九牛一毛 这是…

Leetcode每日一题——“移除元素”

各位CSDN的uu们你们好呀&#xff0c;小雅兰又来啦&#xff0c;今天&#xff0c;小雅兰的内容是移除元素&#xff0c;下面&#xff0c;让我们进入Leetcode的世界吧 说明: 为什么返回数值是整数&#xff0c;但输出的答案是数组呢? 请注意&#xff0c;输入数组是以「引用」方式…

ChatGPT | 使用new bing的简易教程

1. 教程参考&#xff1a; https://juejin.cn/post/7199557716998078522 2.在参考上述教程遇到的问题与解决 2.1 下载dev浏览器的网址打不开 egde dev下载地址&#xff08;上面网站上的&#xff09;我电脑打不开 换用下面的网址即可 https://www.microsoftedgeinsider.com/z…

在three.js中废置对象

基于three.js子如何废置对象(How to dispose of objects) 前言: 为了提高性能,并避免应用程序中的内存泄露,一个重要的方面是废置未使用的类库实体。 每当创建一个three.js中的实例时,都会分配一定数量的内存。然而,three.js会创建在渲染中所必需的特定对象, 例如几何…

4.11、socket地址

4.11、socket地址1.通用 socket 地址2.专用socket地址1.通用 socket 地址 socket 网络编程接口中表示 socket 地址的是结构体 sockaddr&#xff0c;其定义如下&#xff1a; // socket地址其实是一个结构体&#xff0c;封装端口号和IP等信息。后面的socket相关的api中需要使用…