数据结构
首先我们定义需要的数据结构。注意,TreeNode的左右节点都是TreeNode type的,而树只有一个Root数据域,为TreeNode type

type TreeNode struct {Value intLeft *TreeNodeRight *TreeNode
}type BinarySearchTree struct {Root *TreeNode
}

Insert
向二叉搜索树中插入元素,首先要找到插入的位置,然后再插入。这里注意我们的实现方法为给TreeNode和BinarySearchTree这两个type添加方法。
需要注意给type添加方法的方式,同时还要注意,如果你要改变方法调用者,则需要使用指针

func (tree BinarySearchTree) Insert (v int) {tree.Root.Insert(v)
}func (node *TreeNode) Insert (v int){if v < node.Value {if node.Left != nil{node.Left.Insert(v)}else{node.Left = &TreeNode{v, nil, nil}}}else {if node.Right != nil{node.Right.Insert(v)}else{node.Right = &TreeNode{v, nil, nil}}}
}

遍历
树的遍历有前序,后序,中序等等。这里以中序为例。注意slice与slice指针的不同

func (tree BinarySearchTree) InOrder() []int{var res []inttree.Root.InOrder(&res)return res
}func (node *TreeNode) InOrder(result *[]int) {if node.Left != nil{node.Left.InOrder(result)}*result = append(*result, node.Value)if node.Right != nil{node.Right.InOrder(result)}
}

最大最小值

func (tree BinarySearchTree) FindMin() int {node := tree.Rootfor {if node.Left != nil {node = node.Left}else{return node.Value}}
}func (tree BinarySearchTree) FindMax() int {node := tree.Rootfor {if node.Right != nil {node = node.Right}else{return node.Value}}
}

查找

func (tree BinarySearchTree) Contains(v int) bool {node := tree.Rootfor {if node == nil{return false}else if (node.Value == v) {return true}else if (node.Value > v){node = node.Left}else{node = node.Right}}
}

转载于:https://www.cnblogs.com/nyist-xsk/p/11353073.html

golang实现二叉搜索树相关推荐

  1. Golang Java 实现 【将有序数组装换为二叉搜索树】

    ​​​​​​​​​​​​​LeetCode 108道 .将有序数组转换为二叉搜索树 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树. 高度平衡 二叉 ...

  2. 二叉搜索树(golang)

    golang Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后 ...

  3. 验证二叉搜索树的golang实现

    给定一个二叉树,判断其是否是一个有效的二叉搜索树. 一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是二叉搜索树. ...

  4. LeetCode简单题之二叉搜索树的最小绝对差/最小距离

    题目 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 . 差值是一个正数,其数值等于两值之差的绝对值. 示例 1: 输入:root = [4,2,6,1,3] 输出: ...

  5. LeetCode简单题之二叉搜索树的范围和

    题目 给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和. 示例 1: 输入:root = [10,5,15,3,7,null,18], low = 7, ...

  6. 【剑指Offer】23、二叉搜索树的后序遍历序列

      题目描述:   输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同.   解题思路:   对于后续遍历序列,序 ...

  7. 消除左递归实验代码_「leetcode」108. 构造二叉搜索树【递归】【迭代】详解!

    构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树 ...

  8. 剑指offer:面试题36. 二叉搜索树与双向链表

    题目: 二叉搜索树与双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 为了让您更好地理解问题,以下面的二叉搜索树为例: ...

  9. 剑指offer:面试题33. 二叉搜索树的后序遍历序列

    题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 参考以下这颗二叉搜 ...

最新文章

  1. pyecharts官方文档_中国疫情地图pyecharts
  2. 分布式离线计算—Spark—SparkStreaming
  3. MarkDown语法-使用博客园的markDown编辑
  4. 哈希表 - (代码、分析 )
  5. 移动端click延迟和tap事件
  6. Linux下网卡绑定模式
  7. python函数可变长参数_day14 Python函数之可变长参数
  8. 史上最全AI论文集结:近千篇论文分门别类整理好
  9. 在阿里工作5年了,斗胆谈谈我认为的高级开发到底应该是怎样的?
  10. date oracle 表中_oracle数据库 中to_number()、to_char()、to_date()用法介绍
  11. Mysql rpm包安装
  12. 微信开发之微信公众平台基本配置--服务器token验证(Java实现)
  13. Q1净亏损同比扩大222% 四通一达业绩垫底百世还能逆袭吗?
  14. 青岛科技大学计算机一级报名,2019年3月山东青岛科技大学计算机等级考试报名通知...
  15. 嵌入式开发基本环境搭建---ubuntu
  16. Linux配置及指令
  17. 配置Cross-Origin的几种方法
  18. 区块链学习笔记一 BTC密码学原理
  19. 扫雷游戏开发基本思路
  20. 一元三次方程你会解吗?

热门文章

  1. Daily Scrum M2 11-14
  2. 教你在windows 7/xp 下安装使用mencoder
  3. C语言之计算大数阶乘,如计算100!和1000!等~~~
  4. 机器学习中的基本数学知识
  5. (一)为什么你应该(从现在开始就)写博客
  6. Android 三方库EventBus的使用
  7. 单体预聚合的目的是什么_聚合物在加工过程中降解可能性分析与预防
  8. mysql为什么没有nvarchar,关于mysql:为什么不将每个VARCHAR指定为VARCHAR(65535)?
  9. R语言acres92 region_《R语言实战》读书笔记-- 第六章 基本图形
  10. mysql5.0修改字符集,查看mysql字符集及修改表结构