树: https://suanfa.herokuapp.com/3%E6%A0%91/binarytree/

数据结构

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

type TreeNode struct {
Value int
Left *TreeNode
Right *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 []int
tree.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.Root
for {
if node.Left != nil {
node = node.Left
}else{
return node.Value
}
}
} func (tree BinarySearchTree) FindMax() int {
node := tree.Root
for {
if node.Right != nil {
node = node.Right
}else{
return node.Value
}
}
}

查找

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

最新文章

  1. nagios检测http
  2. linux自用命令
  3. easyui-window 关闭事件,只要关闭窗口就会触发
  4. Form onsubmit 事件 阻止表单提交() 必须选中同意选项才可以提交
  5. 知识积累:CA详解
  6. 点击页面任何位置隐藏div
  7. 大理石在哪?(Where is the Marble?,UVa 10474)
  8. ANTLR3完全参考指南读书笔记[01]
  9. java爬虫实战
  10. UVA1292-----Strategic game-----树形DP解决树上的最小点覆盖问题
  11. sql server数据库查询同义词
  12. wpf的无边框窗体透明
  13. django-restframework之缓存系统
  14. oracle跨库连接查询
  15. 本地上传文件至服务器的技巧(linux文件压缩及解压文件)
  16. Scala学习(四)---映射和元组
  17. Day10 Python网络编程 Socket编程
  18. Java使用JDBC连接随意类型数据库(mysql oracle。。)
  19. vue项目修改favicon
  20. Tomcat7 调优及 JVM 参数优化

热门文章

  1. Android Studio问题记录
  2. C++简单年月日的功能实现
  3. \include\configs\mx6q_sabresd.h
  4. apk 解包 打包
  5. 爬虫开发python工具包介绍 (4)
  6. find_element——By 元素定位
  7. 大数据学习——hbase数据库
  8. Leetcode 394.字符串编码
  9. ubuntu 转换图片格式的方法(sam2p, imagemagick)
  10. Web开发细节搜集