package main

import "log"

type node struct {
Item string
Left *node
Right *node
} type bst struct {
root *node
} /*
m
k l
h i j
a b c d e f //先序遍历(根左右):m k h a b i c d l j e f //中序遍历(左根右):a h b k c i d m l e j f //后序遍历(左右根):a b h c d i k e f j l m */ func (tree *bst) buildTree() { m := &node{Item: "m"}
tree.root = m k := &node{Item: "k"}
l := &node{Item: "l"}
m.Left = k
m.Right = l h := &node{Item: "h"}
i := &node{Item: "i"}
k.Left = h
k.Right = i a := &node{Item: "a"}
b := &node{Item: "b"}
h.Left = a
h.Right = b c := &node{Item: "c"}
d := &node{Item: "d"}
i.Left = c
i.Right = d j := &node{Item: "j"}
l.Right = j e := &node{Item: "e"}
f := &node{Item: "f"} j.Left = e
j.Right = f } //先序遍历
func (tree *bst) inOrder() { var inner func(n *node)
inner = func(n *node) { if n == nil {
return
}
log.Println(n.Item)
inner(n.Left)
inner(n.Right)
} inner(tree.root)
} //中序
func (tree *bst) midOrder() { var inner func(n *node)
inner = func(n *node) { if n == nil {
return
}
inner(n.Left)
log.Println(n.Item)
inner(n.Right)
} inner(tree.root)
} //后序
func (tree *bst) lastOrder() { var inner func(n *node)
inner = func(n *node) { if n == nil {
return
}
inner(n.Left)
inner(n.Right)
log.Println(n.Item)
} inner(tree.root)
}
func main() { tree := &bst{} tree.buildTree() // tree.inOrder()
tree.lastOrder() }

golang的树结构三种遍历方式的更多相关文章

  1. Map三种遍历方式

    Map三种遍历方式 package decorator; import java.util.Collection; import java.util.HashMap; import java.util ...

  2. Java中List集合的三种遍历方式(全网最详)

    List集合在Java日常开发中是必不可少的,只要懂得运用各种各样的方法就可以大大提高我们开发的效率,适当活用各种方法才会使我们开发事半功倍. 我总结了三种List集合的遍历方式,下面一一来介绍. 首 ...

  3. set的三种遍历方式-----不能用for循环遍历(无序)

    set的三种遍历方式,set遍历元素 list 遍历元素 http://blog.csdn.net/sunrainamazing/article/details/71577662 set遍历元素 ht ...

  4. for 、foreach 、iterator 三种遍历方式的比较

    习惯用法 for.foreach循环.iterator迭代器都是我们常用的一种遍历方式,你可以用它来遍历任何东西:包括数组.集合等 for 惯用法: List<String> list = ...

  5. 基于Java的二叉树的三种遍历方式的递归与非递归实现

    二叉树的遍历方式包括前序遍历.中序遍历和后序遍历,其实现方式包括递归实现和非递归实现. 前序遍历:根节点 | 左子树 | 右子树 中序遍历:左子树 | 根节点 | 右子树 后序遍历:左子树 | 右子树 ...

  6. 大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

    具体见第三阶段scala-day01中的文档(scala编程基础---基础语法)  1. 函数式编程(https://www.cnblogs.com/wchukai/p/5651185.html): ...

  7. Map的三种遍历方式

    对于Map的三种方式遍历 1.keySet() 2.values() 3.entrySet()三种方式得到Set之后,都可以使用 foreach或者iterator, 不能使用for,因为数据结构决定 ...

  8. java集合的三种遍历方式

    import java.util.ArrayList;  import java.util.Collection;import java.util.Iterator;public class Home ...

  9. Java中list对象的三种遍历方式

    1.增强for循环 for(String str : list) {//其内部实质上还是调用了迭代器遍历方式,这种循环方式还有其他限制,不建议使用. System.out.println(str); ...

随机推荐

  1. 【Redis学习专题】- Redis主从+哨兵集群部署

    集群版本: redis-4.0.14 集群节点: 节点角色 IP redis-master 10.100.8.21 redis-slave1 10.100.8.22 redis-slave2 10.1 ...

  2. Mysql5.7前后修改用户密码变化

    本文主要强调修改密码的sql语句变化.如果是root密码忘记了,请参考Mysql忘记root密码怎么解决 Mysql 5.7以前修改密码 update mysql.user set password= ...

  3. Zookeeper ----- ZAB算法

    介绍 Zookeeper没有使用Paxos实现,而是使用ZAB(Zookeeper原子消息广播协议)作为数据一致性的核心算法. ZAB是一种专为Zookeeper设计的支持崩溃恢复的原子广播协议. Z ...

  4. Statezhong shiyong redux props

    在构造方法中使用props给state赋值不允许, 原因需要检查

  5. xctf-pwn hello_pwn

    走流程,看看文件类型 64位,开了NX 直接丢IDA分析 查看sub_400686() 是个给flag的函数,可以看到,只要满足if语句的条件使dword_60106C == 1853186401就可 ...

  6. SpringSecurity匹配规则介绍

    SpringSecurity匹配规则一 URL匹配 requestMatchers() 配置一个request Mather数组,参数为RequestMatcher 对象,其match 规则自定义,需 ...

  7. 第二部分_Mac技巧

    原文是"池建强"的微信文章,公众号为"MacTalk" 第五十一天 mdfind是一个非常灵活的全局搜索命令,类似Spotlight的命令行模式,可以在任何目录 ...

  8. 在Linux系统中使用Vim读写远程文件

    大家好,我是良许. 今天我们讨论一个 Vim 使用技巧--用 Vim 读写远程文件.要实现这个目的,我们需要使用到一个叫 netrw.vim 的插件.从 Vim 7.x 开始,netrw.vim 就被 ...

  9. PHP debug_zval_dump() 函数

    debug_zval_dump 函数用于查看一个变量在zend引擎中的引用计数.类型信息. 版本要求:PHP 4 >= 4.2.0, PHP 5, PHP 7高佣联盟 www.cgewang.c ...

  10. PDOStatement::bindValue

    PDOStatement::bindValue — 把一个值绑定到一个参数(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 bool PDOStateme ...