// 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. ELK5.3日志分析平台&部署

    https://www.cnblogs.com/xing901022/p/6030296.html ELK简介: Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现 ...

  2. windows搭建RocketMQ服务

    写在前面: 1.基于rocketmq 4.2.0版本 2.64位 win10 系统 3.JDK 1.8 (注意,jdk路径一定不要有空格,不然执行相应的cmd命令时会报错) 4.其它需要的软件,mav ...

  3. if-else(职责链)

    var a=1,b=2,c=3,d=4; const rules = [ { match: function (a, b, c,d) { return a;}, action: function (a ...

  4. 函数防抖 debounce

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. BZOJ1010 [HNOI2008]玩具装箱toy 动态规划 斜率优化

    原文链接http://www.cnblogs.com/zhouzhendong/p/8687797.html 题目传送门 - BZOJ1010 题意 一个数列$C$,然后把这个数列划分成若干段. 对于 ...

  6. day4 字符串的操作

    今天是第四天,一如既往的每天都有不会做的内容,然后还是那种你使劲的绞尽脑汁都想不出来的问题,而且还得是别人提示着,讲着,演示着才能明白的,过后自己还得使劲捉摸才能慢慢吃透.一开始还挺顺利的,还以为自己 ...

  7. bootstrapTable

    一个详细的教程 table参数 bootstrap table使用总结 BootstrapTable使用实例 事件event 事件函数的用法: 方法1 $('#table').bootstrapTab ...

  8. create-react-app项目添加less配置

    使用create-react-app 创建的项目默认不支持less,以下增加less配置的步骤 暴露配置文件 create-react-app生成的项目文,看不到webpack相关的配置文件,需要先暴 ...

  9. codeforces 1058D.Vasya and Triangle (gcd)

    <题目链接> <转载于  >>> > 题目大意: 给出n.m.k.求一个三角形使它的面积等于n*m/k  并且这个三角形的三个顶点所在的坐标为整数点,且顶点满 ...

  10. Django之Form组件(一)

    Django之Form组件(一) Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 基本操作:字 ...