go语言 二叉树
package main import (
"fmt"
"reflect"
) type BinaryNode struct {
Data interface{} //数据
lChild *BinaryNode //左子树
rChild *BinaryNode //右子树
} //创建二叉树
func (node *BinaryNode) Create() {
node = new(BinaryNode)
} //先序遍历
func (node *BinaryNode) PreOrder() {
if node == nil {
return
}
//DLR — 先序遍历,即先根再左再右
fmt.Println(node.Data) //递归遍历左子树
node.lChild.PreOrder()
//递归遍历右子树
node.rChild.PreOrder() } //中序遍历
func (node *BinaryNode) MidOrder() {
if node == nil {
return
} //LDR — 中序遍历,即先左再根再右
//递归遍历左子树
node.lChild.MidOrder()
//打印数据
fmt.Println(node.Data)
//递归遍历右子树
node.rChild.MidOrder() } //后序遍历
func (node *BinaryNode) RearOrder() {
if node == nil {
return
} //LRD — 后序遍历,即先左再右再根
//递归遍历左子树
node.lChild.RearOrder()
//递归遍历右子树
node.rChild.RearOrder()
//打印数据
fmt.Println(node.Data)
} //二叉树高度 深度
func (node *BinaryNode) TreeHeight() int {
if node == nil {
return 0
}
//进入下一层遍历
lh := node.lChild.TreeHeight()
rh := node.rChild.TreeHeight()
if lh > rh {
lh++
return lh
} else {
rh++
return rh
} } //二叉树叶子节点个数
//叶子节点是没有后继的节点
func (node *BinaryNode) LeafCount(num *int) {
if node == nil {
return
}
//判断没有后继的节点为叶子节点
if node.lChild == nil && node.rChild == nil {
(*num)++
}
node.lChild.LeafCount(num)
node.rChild.LeafCount(num)
} //二叉树数据查找
func (node *BinaryNode) Search(Data interface{}) {
if node == nil {
return
} //== 不支持slice 和 map
//reflect.DeepEqual()
if reflect.TypeOf(node.Data) == reflect.TypeOf(Data) && node.Data == Data {
fmt.Println("找到数据", node.Data)
return
}
node.lChild.Search(Data)
node.rChild.Search(Data)
} //二叉树销毁
func (node *BinaryNode) Destroy() {
if node == nil {
return
} node.lChild.Destroy()
node.lChild = nil
node.rChild.Destroy()
node.rChild = nil
node.Data = nil } //二叉树反转
//如果想反转二叉树 二叉树必须是一个满二叉树
func (node *BinaryNode) Reverse() {
if node == nil {
return
} //交换节点 多重赋值
node.lChild, node.rChild = node.rChild, node.lChild node.lChild.Reverse()
node.rChild.Reverse() } //二叉树拷贝
func (node *BinaryNode) Copy() *BinaryNode {
if node == nil {
return nil
}
lChild:=node.lChild.Copy()
rChild:=node.rChild.Copy() //创建写节点 拷贝数据
newNode:=new(BinaryNode)
newNode.Data=node.Data
newNode.lChild=lChild
newNode.rChild=rChild
return newNode
}
go语言 二叉树的更多相关文章
- Hello world!(内含自己编写的C语言二叉树同学录)
修改:刷了一段时间的题,水平渐涨,发现同学录真的要做成市面可行的应用的话,应该按学号建立二叉平衡树,红黑树是一个可行的选择. 在同学的推荐下,来到博客园来找志同道合的人交流代码.3个月后参加蓝桥杯 ...
- c语言二叉树基本操作
编译器为vs2013 #include "stdafx.h" #include<malloc.h> #include<stdlib.h> #define O ...
- C语言二叉树的建立与遍历
二叉树的建立和遍历都要用到递归,先暂时保存一下代码,其中主要是理解递归的思想,其它的就都好理解了.这里是三种遍历方式,其实理解一种,其它的几个就都理解了,就是打印出来的顺序不一样而已.建立和遍历的方式 ...
- [数据结构]C语言二叉树的实现
树和图是数据结构中比较麻烦的东西,里面涉及的概念比较多,也最有用, 就比如一般树广泛应用于人工智能的博弈上,而基于图的广度优先和深度优先搜索也广泛应用于人工智能寻路上面 首先我们要把树进行分类: &g ...
- Go语言二叉树定义及遍历算法实现
// binary_tree 二叉树 package Algorithm import ( "reflect" ) // 二叉树定义 type BinaryTree struct ...
- C语言二叉树的创建、(先中后序)遍历以及存在的问题
#include<stdlib.h> #include<stdio.h> #define True 1 #define False 0 typedef char TElemTy ...
- C语言二叉树遍历及路径查找
#include<iostream> #include<stdio.h> #include<math.h> #include<malloc.h> usi ...
- c语言二叉树
Department of Computing and Information SystemsCOMP10002 Foundations of AlgorithmsSemester 2, 2014As ...
- c语言二叉树的递归建立
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <malloc.h&g ...
随机推荐
- mysql权限过滤
1.用like做权限过滤 上级部门可以看到下级部门发布的正式文件,下级部门不能看到上级部门发布的正式文件 SELECT*FROM cms_nrgl_st a, mz_xzjg bWHERE a.sys ...
- JS 字符串 String对象
charAt(index) 返回指定索引位置的字符 charCodeAt() 返回指定索引位置字符的 Unicode 值 indexOf(searchString, startIndex) 返回子字符 ...
- 自动生成admin(后台)
public --->>>>index.php 入口文件如下: // +---------------------------------------------------- ...
- (转)R语言 SVM支持向量机在 R 语言中的实现和使用
支持向量机是一个相对较新和较先进的机器学习技术,最初提出是为了解决二类分类问题,现在被广泛用于解决多类非线性分类问题和回归问题.继续阅读本文,你将学习到支持向量机如何工作,以及如何利用R语言实现支持向 ...
- 解决pjax重复绑定
个人博客 地址:http://www.wenhaofan.com/article/20180929002529 1.所有js统一在pjax容器外引入 在pjax容器外引入的js只会被引入一次,所以不会 ...
- 解决安装完Anaconda后右键没有powershell、、、
法一: win+R 打开资源管理 输入powershell.exe 法二: 额,,按住 shift 再右键...嘿嘿嘿
- HTML之<meta>标签全解
一.定义 元素可提供相关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词等等. 标签位于文档的头部<head></head>标签内 ...
- centos7下编译安装redis5.05
准备环境: 1.一台centos7机器,配置没有什么要求(能联网) 2.下载好redis压缩包 下载redis包: 1.登录redis官网: https://redis.io/download 2.选 ...
- centos6.8安装教程
特别详细的一个安装教程以及镜像下载等,用虚拟机不会安装或者安装失败的可以参考一下. https://blog.csdn.net/wu_zeqin/article/details/79833046
- tensorflow-gpu安装
添加清华源(输入清华仓库镜像),可以提高下载速度: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/ ...