// binary_tree 二叉树
package Algorithm import (
"reflect"
) // 二叉树定义
type BinaryTree struct {
Data interface{}
Lchild *BinaryTree
Rchild *BinaryTree
} // 构造方法
func NewBinaryTree(data interface{}) *BinaryTree {
return &BinaryTree{Data: data}
} // 先序遍历
func (bt *BinaryTree) PreOrder() []interface{} {
t := bt
stack := NewStack(reflect.TypeOf(bt))
res := make([]interface{}, )
for t != nil || !stack.Empty() {
for t != nil {
res = append(res, t.Data)
stack.Push(t)
t = t.Lchild
}
if !stack.Empty() {
v, _ := stack.Pop()
t = v.(*BinaryTree)
t = t.Rchild
}
}
return res
} // 中序遍历
func (bt *BinaryTree) InOrder() []interface{} {
t := bt
stack := NewStack(reflect.TypeOf(bt))
res := make([]interface{}, )
for t != nil || !stack.Empty() {
for t != nil {
stack.Push(t)
t = t.Lchild
}
if !stack.Empty() {
v, _ := stack.Pop()
t = v.(*BinaryTree)
res = append(res, t.Data)
t = t.Rchild
}
}
return res
} // 后续遍历
func (bt *BinaryTree) PostOrder() []interface{} {
t := bt
stack := NewStack(reflect.TypeOf(bt))
s := NewStack(reflect.TypeOf(true))
res := make([]interface{}, )
for t != nil || !stack.Empty() {
for t != nil {
stack.Push(t)
s.Push(false)
t = t.Lchild
}
for flag, _ := s.Top(); !stack.Empty() && flag.(bool); {
s.Pop()
v, _ := stack.Pop()
res = append(res, v.(*BinaryTree).Data)
flag, _ = s.Top()
}
if !stack.Empty() {
s.Pop()
s.Push(true)
v, _ := stack.Top()
t = v.(*BinaryTree)
t = t.Rchild
}
}
return res
}

github链接:https://github.com/gaopeng527/go_Algorithm/blob/master/binary_tree.go

Go语言二叉树定义及遍历算法实现的更多相关文章

  1. 二叉树 ADT接口 遍历算法 常规运算

    BTree.h   (结构定义, 基本操作, 遍历) #define MS 10 typedef struct BTreeNode{ char data; struct BTreeNode * lef ...

  2. Python -二叉树 创建与遍历算法(很详细)

    树表示由边连接的节点.它是一个非线性的数据结构.它具有以下特性. 一个节点被标记为根节点. 除根节点之外的每个节点都与一个父节点关联. 每个节点可以有一个arbiatry编号的chid节点. 我们使用 ...

  3. [LintCode] Binary Tree Level Order Traversal(二叉树的层次遍历)

    描述 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 样例 给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \ 9 20 / \ 15 7 返回他的分层遍历结果: [ [3] ...

  4. 《数据结构与算法(C语言版)》严蔚敏 | 第五章 建立二叉树,并完成三/四种遍历算法

    PS:所有的代码示例使用的都是这个图 2019-10-29 利用p126的算法5.3建立二叉树,并完成三种遍历算法 中序 后序 先序 #include<iostream> #include ...

  5. 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS

    图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其 ...

  6. 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)

    阅读并理解提供给大家的C语言文法文件. 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图 ...

  7. 链表创建和链表遍历算法的演示_C语言

    今天搞了一个多小时,头是疼的,应该是没休息好吧,学习了数据结构这一节,感觉收益良多,下面贴上代码和心得: /*24_链表创建和链表遍历算法的演示*/ # include <stdio.h> ...

  8. 毕业了-java二叉树层次遍历算法

    /*************************************** * 时间:2017年6月23日 * author:lcy * 内容:二叉树的层次遍历 * 需要借助队列这个数据结构,直 ...

  9. 算法 dfs —— 将二叉树 先序遍历 转为 链表

    将二叉树拆成链表 中文English 将一棵二叉树按照前序遍历拆解成为一个 假链表.所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针. Example 样例 1: 输入: ...

随机推荐

  1. Hive| 查询

    Hive中执行SQL语句时,出现类似于“Display all 469 possibilities? (y or n)”的错误,根本原因是因为SQL语句中存在tab键导致,tab键在linux系统中是 ...

  2. Scrapy-redis 安装配置使用

    # 安装redis服务器端 sudo apt-get install redis-server # 安装scrapy和scrapy-redis库 pip install scrapy pip inst ...

  3. 【官档整理】Visual Studio 2017 VS2017 中文离线安装包下载

    [官档整理]Visual Studio 2017 VS2017 中文离线安装包下载 转 https://blog.csdn.net/fromfire2/article/details/81104648 ...

  4. Person Re-ID行人重试别数据集

    1. 杜克大学数据(DukeMTMC-reID) DukeMTMC 数据集是一个大规模标记的多目标多摄像机行人跟踪数据集.它提供了一个由 8 个同步摄像机记录的新型大型高清视频数据集,具有 7,000 ...

  5. anaconda源配置

    1. 生成配置文件 第一次运行 conda config命令时,将会在用户的home目录创建该文件..condarc配置文件,是一种可选的(optional)运行期配置文件,其默认情况下是不存在的. ...

  6. hdu2473

    hdu2473并查集的删除操作建立虚点,删除它就断掉了它在原图中的所有关系,而成为独立节点,而且它只能被删除一次,而且删除之后还能进行操作,采用映射(虚点)的方法,建立虚点并把删除之后的操作挪到虚点上 ...

  7. macOS packages安装时的降级处理

    一.降级安装 在制作macOS的pkg安装包时,一般新发布的程序版本会比旧版本更高.但是有的时候我们也希望在安装的时候,对程序的某些依赖库进行降级安装.比如高版本依赖库中出现了一些Bug,使用旧版本的 ...

  8. vue实例属性之el,template,render

    一.el,template,render属性优先性当Vue选项对象中有render渲染函数时,Vue构造函数将直接使用渲染函数渲染DOM树,当选项对象中没有render渲染函数时,Vue构造函数首先通 ...

  9. Django Simple Captcha插件

    正文开始 先看官方描述 1.安装 打开控制台,输入如下: pip install django-simple-captcha 2.把APP添加到Django项目进入自己的Django项目,在setti ...

  10. NEO学习笔记,从WIF到地址

    2018开年,先给大家拜个年,Happy Neo Year. 开年总得写点什么,就打算继续开学习笔记系列,一点一点仔细的去分析NEO. 今天说一说从WIF到地址的这一串关系.   简单说就一张图: 或 ...