// 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. 3186Treats for the Cows(区间dp)

    题意:给一个数组v,每次可以取前面的或者后面的,第k次取的v[i]价值为v[i]*k,问总价值最大是多少. 区间dp. 区间dp可以不枚举len  直接枚举i和j即可  见代码 #include &l ...

  2. 关系网络数据可视化:1. 关系网络图&Gephi

    1.关系网络图 如何来表示两个对象之间的关系? 把对象变成点,点的大小.颜色可以是它的两个参数,两个点之间的关系可以用连线来表示.连线分为无向(只是连接的导向,一些简单的关系很容易体现)和有向(复杂网 ...

  3. Ubuntu 硬盘分区只读,重新挂载为读写分区之后,文件依然创建出错

    原因: 分区只读,可能是windows没有正常关机,或者使用了混合休眠模式. 解决方案: sudo mount -o remount,rw /dev/sdaX 若重新挂载后,创建文件以及文件夹失败: ...

  4. Maya Max python PySide集成 shiboken版本对应关系

    Maya_Max _python_PySide集成_shiboken版本对应关系 1.如何查看 Maya Max 集成的 Python版本: Maya:在 Maya 的安装目录下的 bin 文件夹中找 ...

  5. 爬虫之xpath用法

    导包用: from lxml import etree

  6. Java中System类的相关应用

    1.Runtime: public class RuntimeDemo { public static void main(String[] args) { Runtime runtime=Runti ...

  7. Java 之 Web前端(五)

    1.过滤器 a.定义:是一个中间组件,用于拦截源数据和目的数据之间的消息,并过滤二者之间传递的数据 b.步骤: ①建class继承Filter实现抽象方法 public class EncodingF ...

  8. Java 之 OOAD

    1.UML a.全称:统一建模语言 b.UML图:流程图.用例图.时序图.类图 c.接口与类之间——实现 d.对象与对象之间 ①泛化——在UML中不叫继承,而叫泛化 ②关联 依赖:use a 是一种弱 ...

  9. RBF:RBF基于近红外光谱的汽油辛烷值含量预测结果对比—Jason niu

    load spectra_data.mat temp = randperm(size(NIR,1)); P_train = NIR(temp(1:50),:)'; T_train = octane(t ...

  10. Tallest Cow POJ - 3263 (区间点修改)

    FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a positi ...