Go|Go 数据结构之二叉树详情
目录
- Go 语言实现二叉树
- 定义二叉树的结构
- 二叉树遍历
- 创建二叉树
- 插入值
- 测试
树可以有许多不同的形状,并且它们可以在每个节点允许的子节点数量或它们在节点内组织数据值的方式上有所不同。 而在其中最常用的树之一是二叉树。 二叉树是一棵树,其中每个节点最多可以有两个孩子。 一个孩子被识别为左孩子,另一个孩子被识别为右孩子。
二叉树是一种数据结构,在每个节点下面最多存在两个其他节点。即一个节点要么连接至一个、两个节点或不连接其他节点。
树形结构的深度(也被称作高度)则被定义为根节点为根节点至某个节点间的最长路径,而节点的深度则表示当当前节点至树根节点间的边数。二叉树有许多不同的形状和大小。 形状取决于节点的数量和节点的链接方式。
下图说明了由九个节点组成的二叉树的三种不同形状:
文章图片
Go 语言实现二叉树
定义二叉树的结构
package mainimport ("fmt""math/rand""time")type Tree struct {Left *TreeValue intRight *Tree}
二叉树遍历
func traverse(t *Tree) {if t == nil {return}traverse(t.Left)fmt.Print(t.Value, " ")traverse(t.Right)}
traverse()
函数通过递归方式访问二叉树的全部节点。创建二叉树
利用
create()
函数利用随机整数填写二叉树:func create(n int) *Tree {var t *Treerand.Seed(time.Now().Unix())for i := 0; i < 2 * n; i++ {temp := rand.Intn(n * 2)t = insert(t, temp)}return t}
插入值
insert
函数:- 第一个 if 语句在插入时如果是空树,就把插入的节点设置为根节点,并创建为
&Tree{nil, v, nil}
- 第二个 if 语句确定插入值是否已在二叉树中存在。若存在,函数将直接返回且不执行任何操作
- 第三个 if 语句检查插入的值位于当前节点的左孩子节点还是右孩子节点,并插入到相应的位置。
func insert(t *Tree, v int) *Tree {if t == nil {return &Tree{nil, v, nil}}if v == t.Value {return t}if v < t.Value {t.Left = insert(t.Left, v)return t}t.Right = insert(t.Right, v)return t}
测试
package mainimport ("fmt""math/rand""time")type Tree struct {Left *TreeValue intRight *Tree}func traverse(t *Tree) {if t == nil {return}traverse(t.Left)fmt.Print(t.Value, " ")traverse(t.Right)}func create(n int) *Tree {var t *Treerand.Seed(time.Now().Unix())for i := 0; i < 2*n; i++ {temp := rand.Intn(n * 2)t = insert(t, temp)}return t}func insert(t *Tree, v int) *Tree {if t == nil {return &Tree{nil, v, nil}}if v == t.Value {return t}if v < t.Value {t.Left = insert(t.Left, v)return t}t.Right = insert(t.Right, v)return t}func main() {tree := create(10)fmt.Println("The value of the root of the tree is", tree.Value)traverse(tree)fmt.Println()tree = insert(tree, -10)tree = insert(tree, -2)traverse(tree)fmt.Println()fmt.Println("The value of the boot of the the tree is", tree.Value)}
运行结果:
The value of the root of the tree is 18【Go|Go 数据结构之二叉树详情】到此这篇关于 Go 数据结构之二叉树详情的文章就介绍到这了,更多相关 Go 二叉树内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
0 1 4 5 6 8 9 10 12 14 15 18 19
-10 -2 0 1 4 5 6 8 9 10 12 14 15 18 19
The value of the boot of the the tree is 18
推荐阅读
- 数据结构与算法: 堆 优先队列 JavaScript语言描述
- Day 31/100 数据结构链表(4)——用双指针法找到相交链表的节点
- 什么是数据结构指标(详解————)
- 数据结构初阶|初阶数据结构——线性表——链表——带头双向循环链表
- 重新审视C#|重新审视C# Span数据结构
- 【Redis 系列】redis 学习十五,redis sds数据结构和底层设计原理
- [ 数据结构 - C语言] 带你一篇了解 顺序表
- Java|【数据结构与算法】——必知必会的排序算法你会几种
- 数据结构与算法|数据结构与算法 | 用Java语言实现顺序表真的不难
- 进阶面试!数据结构流行面试题热门推荐