IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> golang数据结构二叉树遍历 -> 正文阅读

[数据结构与算法]golang数据结构二叉树遍历

什么是二叉树

二叉树(Binary tree):是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个节点最多只能有两棵子树,且有左右之分。

二叉树图

A
B
D
H
E
I
C
F
J
K
G

先序遍历

先序:是二叉树遍历中的一种,即先访问根结点,然后遍历左子树,后遍历右子树。遍历左、右子树时,先访问根结点,后遍历左子树,后遍历右子树,如果二叉树为空则返回。

package main
import "fmt"
type node struct {
	value     string
	leftNode  *node
	rightNode *node
}
func main() {
	n := node{}
	node := n.newTree()
	n.Show(node)
}
// 前序遍历  根左右
func (n *node) Show(node *node) {
	if node != nil {
		fmt.Print(node.value)
		n.Show(node.leftNode)
		n.Show(node.rightNode)
	}
}
// 构造二叉树   返回根节点
func (n *node) newTree() *node {
	nodeA := &node{
		value: "A",
	}
	nodeB := &node{
		value: "B",
	}
	nodeC := &node{
		value: "C",
	}
	nodeD := &node{
		value: "D",
	}
	nodeE := &node{
		value: "E",
	}
	nodeF := &node{
		value: "F",
	}
	nodeG := &node{
		value: "G",
	}
	nodeH := &node{
		value: "H",
	}
	nodeI := &node{
		value: "I",
	}
	nodeJ := &node{
		value: "J",
	}
	nodeK := &node{
		value: "K",
	}
	nodeA.leftNode = nodeB
	nodeA.rightNode = nodeC
	nodeB.leftNode = nodeD
	nodeB.rightNode = nodeE
	nodeC.leftNode = nodeF
	nodeC.rightNode = nodeG
	nodeD.rightNode = nodeH
	nodeE.rightNode = nodeI
	nodeF.leftNode = nodeJ
	nodeF.rightNode = nodeK
	fmt.Print("先序:")
	return nodeA
}

中序遍历

中序:是二叉树遍历中的一种,即先遍历左子树,后访问根结点,然后遍历右子树。若二叉树为空则结束返回。

package main
import "fmt"
type node struct {
	value     string
	leftNode  *node
	rightNode *node
}

func main() {
	n := node{}
	node := n.newTree()
	n.Show(node)
}

// 中序遍历  左根右
func (n *node) Show(node *node) {
	if node != nil {
		n.Show(node.leftNode)
		fmt.Print(node.value)
		n.Show(node.rightNode)
	}
}

// 构造二叉树   返回根节点
func (n *node) newTree() *node {
	nodeA := &node{
		value: "A",
	}
	nodeB := &node{
		value: "B",
	}
	nodeC := &node{
		value: "C",
	}
	nodeD := &node{
		value: "D",
	}
	nodeE := &node{
		value: "E",
	}
	nodeF := &node{
		value: "F",
	}
	nodeG := &node{
		value: "G",
	}
	nodeH := &node{
		value: "H",
	}
	nodeI := &node{
		value: "I",
	}
	nodeJ := &node{
		value: "J",
	}
	nodeK := &node{
		value: "K",
	}
	nodeA.leftNode = nodeB
	nodeA.rightNode = nodeC
	nodeB.leftNode = nodeD
	nodeB.rightNode = nodeE
	nodeC.leftNode = nodeF
	nodeC.rightNode = nodeG
	nodeD.rightNode = nodeH
	nodeE.rightNode = nodeI
	nodeF.leftNode = nodeJ
	nodeF.rightNode = nodeK
	fmt.Print("中序:")
	return nodeA
}

后序遍历

后序:是二叉树遍历中的一种,即先遍历左子树,后遍历右子树,然后访问根结点,遍历左、右子树时,仍先遍历左子树,后遍历右子树,最后遍历根结点。

package main
import "fmt"
type node struct {
	value     string
	leftNode  *node
	rightNode *node
}
func main() {
	n := node{}
	node := n.newTree()
	n.Show(node)
}
// 后序遍历  左右根
func (n *node) Show(node *node) {
	if node != nil {
		n.Show(node.leftNode)
		n.Show(node.rightNode)
		fmt.Print(node.value)
	}
}
// 构造二叉树   返回根节点
func (n *node) newTree() *node {
	nodeA := &node{
		value: "A",
	}
	nodeB := &node{
		value: "B",
	}
	nodeC := &node{
		value: "C",
	}
	nodeD := &node{
		value: "D",
	}
	nodeE := &node{
		value: "E",
	}
	nodeF := &node{
		value: "F",
	}
	nodeG := &node{
		value: "G",
	}
	nodeH := &node{
		value: "H",
	}
	nodeI := &node{
		value: "I",
	}
	nodeJ := &node{
		value: "J",
	}
	nodeK := &node{
		value: "K",
	}
	nodeA.leftNode = nodeB
	nodeA.rightNode = nodeC
	nodeB.leftNode = nodeD
	nodeB.rightNode = nodeE
	nodeC.leftNode = nodeF
	nodeC.rightNode = nodeG
	nodeD.rightNode = nodeH
	nodeE.rightNode = nodeI
	nodeF.leftNode = nodeJ
	nodeF.rightNode = nodeK
	fmt.Print("后序:")
	return nodeA
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:21:18  更:2022-04-29 12:21:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 5:29:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码