文章目录

  • 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 二叉树遍历相关推荐

  1. python实现二叉树遍历(前序遍历、中序遍历、后序遍历)

    python实现二叉树遍历(前序遍历.中序遍历.后序遍历) 在计算机科学中,二叉树是一种树数据结构,其中每个节点最多有两个子节点,称为左子节点和右子节点.使用集合理论概念的递归定义是(非空)二叉树是元 ...

  2. 数据结构之二叉树(遍历、建立、深度)

    数据结构之二叉树(遍历.建立.深度) 1.二叉树的深度遍历 二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树的所有结点,使得每个结点被访问一次且仅被访问一次. 对于二叉树的深度遍历,有前序遍历 ...

  3. C#二叉树遍历算法实现浅析

    C#算法实现了二叉树的定义,怎么构造一颗已知的二叉树,用几种常规的算法(先序,中序,后序,层次)进行C#二叉树遍历.希望能给有需要人带来帮助,也希望能得到大家的指点.有关C#数据结构的书在书店里找到, ...

  4. 【关于封装的那些事】 缺失封装 【关于封装的那些事】 泄露的封装 【关于封装的那些事】 不充分的封装 【图解数据结构】二叉查找树 【图解数据结构】 二叉树遍历...

    [关于封装的那些事] 缺失封装 目录 - 缺失封装 为什么不能缺失封装? 缺失封装潜在的原因 未意识到关注点会不断变化 混合关注点 幼稚的设计决策 示例分析一 示例分析二 总结 缺失封装 没有将实现变 ...

  5. BinaryTreeTraversal(二叉树遍历)

    二叉树遍历 遍历命名 根据访问结点操作发生位置命名: ① NLR:前序遍历(Preorder Traversal 亦称(先序遍历)) --访问根结点的操作发生在遍历其左右子树之前. ② LNR:中序遍 ...

  6. l2-004 这是二叉搜索树吗?_LeetCode 例题精讲 | 11 二叉树转化为链表:二叉树遍历中的相邻结点...

    本期例题: LeetCode 98. Validate Binary Search Tree 验证二叉搜索树(Medium) LeetCode 426. Convert Binary Tree to ...

  7. 数据结构源码笔记(C语言):二叉树遍历

    //二叉树遍历 #include<stdio.h> #include<malloc.h> #include<malloc.h> #define MaxSize 10 ...

  8. 第九周项目实践3 利用二叉树遍历思想解决问题

    *Copyright (c)2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称: *作 者:邵雪源 *完成日期:2017年11月2日 *版 本 号:v1.0 ...

  9. 九度oj 题目1078:二叉树遍历

    题目1078:二叉树遍历 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5326 解决:3174 题目描述: 二叉树的前序.中序.后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历 ...

最新文章

  1. 小M的简单题(easy)
  2. Linux内核网络数据包发送(三)——IP协议层分析
  3. 【UOJ549】序列妙妙值【异或】【根号分治】
  4. ConfigParser.InterpolationSyntaxError: ‘%‘ must be followed by ‘%‘ or ‘(‘, found: “%‘“
  5. Service 中的 onStart 和 onStartCommand
  6. AD、DHCP、DNS概念整理
  7. python破解百度网盘提取码_Python 一键获取百度网盘提取码
  8. 基于 Openocd 和 FT2232H 的 ARMv8(Coretex-A53)调试
  9. 三星手机上,setOnEditorActionListener软键盘监听回车无效,解决方案
  10. 68 ping: Lacking privilege for raw socket.
  11. 蓝桥杯之二阶魔方旋转
  12. echarts中国地图散点实现自定义动画
  13. 少儿编程教育好不好---《浅谈青少儿编程教育与计算思维》
  14. 电子脑PHP动画制作,用Flash制作变形动画效果
  15. 网络发展背景、TCP/IP五层模型、网络传输基本流程、ip地址与端口概念
  16. 带通 带阻滤波器 幅频响应_一文带你通俗理解幅频响应和相频响应
  17. 51单片机 ret和reti
  18. Linux Socket 编程实验
  19. 神经网络与深度学习【自用】
  20. 【附源码】计算机毕业设计Python安卓便利猫电影购票系统安卓app14g1h(源码+程序+LW+调试部署)

热门文章

  1. 网站设计系列:网站易用性
  2. MySQL触发器怎么写?
  3. 前向差分、后向差分和中心差分误差分析
  4. java image转换icon_内存转换Image到Icon
  5. Hadoop数据完整性与CheckSum校验原理
  6. 【转】UAP studio基础使用技巧
  7. Java学习路线·入门
  8. 我的投资经历(写给关注我的友军)
  9. Beta函数和Gamma函数的关系
  10. Monkey King【大根堆】