Golang 二叉树遍历
文章目录
- 1. 二叉树的定义
- 2. 前序遍历
- 3. 中序遍历
- 4. 后序遍历
1. 二叉树的定义
- 二叉树需满足的条件
① 本身是有序树
② 树中包含的各个节点的长度不能超过2,即只能是0、1或者2
2. 前序遍历
前序遍历二叉树的顺序:根——》左——》右
package mainimport "fmt"//定义结构体
type Student struct {Name stringAge intScore float32left *Student //左子树指针right *Student //右子树指针
}//二叉树定义
func main() {//根节点var root Studentroot.Name = "root"root.Age = 18root.Score = 88//一级左子树var left1 Studentleft1.Name = "left1"left1.Age = 20left1.Score = 80root.left = &left1//一级右子树var right1 Studentright1.Name = "right1"right1.Age = 22right1.Score = 100root.right = &right1//二级左子树var left2 Studentleft2.Name = "left2"left2.Age = 25left2.Score = 90left1.left = &left2//调用遍历函数Req(&root)}//递归算法遍历整个二叉树
func Req(tmp *Student) {for tmp == nil {return}fmt.Println(tmp)//遍历左子树Req(tmp.left)//遍历右子树Req(tmp.right)
}//输出结果如下
&{root 18 88 0xc0000c0480 0xc0000c04b0}
&{left1 20 80 0xc0000c04e0 <nil>}
&{left2 25 90 <nil> <nil>}
&{right1 22 100 <nil> <nil>}
3. 中序遍历
中序遍历:左——》根——》右
package mainimport "fmt"//定义结构体
type Student struct {Name stringAge intScore float32left *Student //左子树指针right *Student //右子树指针
}//二叉树定义
func main() {//根节点var root Studentroot.Name = "root"root.Age = 18root.Score = 88//一级左子树var left1 Studentleft1.Name = "left1"left1.Age = 20left1.Score = 80root.left = &left1//一级右子树var right1 Studentright1.Name = "right1"right1.Age = 22right1.Score = 100root.right = &right1//二级左子树var left2 Studentleft2.Name = "left2"left2.Age = 25left2.Score = 90left1.left = &left2//调用遍历函数Req(&root)}//递归算法遍历整个二叉树
func Req(tmp *Student) {for tmp == nil {return}//遍历左子树Req(tmp.left)//输出root节点fmt.Println(tmp)//遍历右子树Req(tmp.right)
}//输出结果如下
&{left2 25 90 <nil> <nil>}
&{left1 20 80 0xc000114510 <nil>}
&{root 18 88 0xc0001144b0 0xc0001144e0}
&{right1 22 100 <nil> <nil>}
4. 后序遍历
后序遍历:左——》右——》根
package mainimport "fmt"//定义结构体
type Student struct {Name stringAge intScore float32left *Student //左子树指针right *Student //右子树指针
}//二叉树定义
func main() {//根节点var root Studentroot.Name = "root"root.Age = 18root.Score = 88//一级左子树var left1 Studentleft1.Name = "left1"left1.Age = 20left1.Score = 80root.left = &left1//一级右子树var right1 Studentright1.Name = "right1"right1.Age = 22right1.Score = 100root.right = &right1//二级左子树var left2 Studentleft2.Name = "left2"left2.Age = 25left2.Score = 90left1.left = &left2//调用遍历函数Req(&root)}//递归算法遍历整个二叉树
func Req(tmp *Student) {for tmp == nil {return}//遍历左子树Req(tmp.left)//遍历右子树Req(tmp.right)//输出root节点fmt.Println(tmp)}//输出结果如下
&{left2 25 90 <nil> <nil>}
&{left1 20 80 0xc0000c04e0 <nil>}
&{right1 22 100 <nil> <nil>}
&{root 18 88 0xc0000c0480 0xc0000c04b0}
Golang 二叉树遍历相关推荐
- python实现二叉树遍历(前序遍历、中序遍历、后序遍历)
python实现二叉树遍历(前序遍历.中序遍历.后序遍历) 在计算机科学中,二叉树是一种树数据结构,其中每个节点最多有两个子节点,称为左子节点和右子节点.使用集合理论概念的递归定义是(非空)二叉树是元 ...
- 数据结构之二叉树(遍历、建立、深度)
数据结构之二叉树(遍历.建立.深度) 1.二叉树的深度遍历 二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树的所有结点,使得每个结点被访问一次且仅被访问一次. 对于二叉树的深度遍历,有前序遍历 ...
- C#二叉树遍历算法实现浅析
C#算法实现了二叉树的定义,怎么构造一颗已知的二叉树,用几种常规的算法(先序,中序,后序,层次)进行C#二叉树遍历.希望能给有需要人带来帮助,也希望能得到大家的指点.有关C#数据结构的书在书店里找到, ...
- 【关于封装的那些事】 缺失封装 【关于封装的那些事】 泄露的封装 【关于封装的那些事】 不充分的封装 【图解数据结构】二叉查找树 【图解数据结构】 二叉树遍历...
[关于封装的那些事] 缺失封装 目录 - 缺失封装 为什么不能缺失封装? 缺失封装潜在的原因 未意识到关注点会不断变化 混合关注点 幼稚的设计决策 示例分析一 示例分析二 总结 缺失封装 没有将实现变 ...
- BinaryTreeTraversal(二叉树遍历)
二叉树遍历 遍历命名 根据访问结点操作发生位置命名: ① NLR:前序遍历(Preorder Traversal 亦称(先序遍历)) --访问根结点的操作发生在遍历其左右子树之前. ② LNR:中序遍 ...
- l2-004 这是二叉搜索树吗?_LeetCode 例题精讲 | 11 二叉树转化为链表:二叉树遍历中的相邻结点...
本期例题: LeetCode 98. Validate Binary Search Tree 验证二叉搜索树(Medium) LeetCode 426. Convert Binary Tree to ...
- 数据结构源码笔记(C语言):二叉树遍历
//二叉树遍历 #include<stdio.h> #include<malloc.h> #include<malloc.h> #define MaxSize 10 ...
- 第九周项目实践3 利用二叉树遍历思想解决问题
*Copyright (c)2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称: *作 者:邵雪源 *完成日期:2017年11月2日 *版 本 号:v1.0 ...
- 九度oj 题目1078:二叉树遍历
题目1078:二叉树遍历 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5326 解决:3174 题目描述: 二叉树的前序.中序.后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历 ...
最新文章
- 小M的简单题(easy)
- Linux内核网络数据包发送(三)——IP协议层分析
- 【UOJ549】序列妙妙值【异或】【根号分治】
- ConfigParser.InterpolationSyntaxError: ‘%‘ must be followed by ‘%‘ or ‘(‘, found: “%‘“
- Service 中的 onStart 和 onStartCommand
- AD、DHCP、DNS概念整理
- python破解百度网盘提取码_Python 一键获取百度网盘提取码
- 基于 Openocd 和 FT2232H 的 ARMv8(Coretex-A53)调试
- 三星手机上,setOnEditorActionListener软键盘监听回车无效,解决方案
- 68 ping: Lacking privilege for raw socket.
- 蓝桥杯之二阶魔方旋转
- echarts中国地图散点实现自定义动画
- 少儿编程教育好不好---《浅谈青少儿编程教育与计算思维》
- 电子脑PHP动画制作,用Flash制作变形动画效果
- 网络发展背景、TCP/IP五层模型、网络传输基本流程、ip地址与端口概念
- 带通 带阻滤波器 幅频响应_一文带你通俗理解幅频响应和相频响应
- 51单片机 ret和reti
- Linux Socket 编程实验
- 神经网络与深度学习【自用】
- 【附源码】计算机毕业设计Python安卓便利猫电影购票系统安卓app14g1h(源码+程序+LW+调试部署)