---------------树--------------
文章平均质量分 68
田园园野
我坚持,我坚信
展开
-
算法训练 结点选择
算法训练 结点选择 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值。如果一个点被选择了,那么在树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少? 输入格式 第一行包含一个整数 n 。 接下来的一行包含 n 个正整数,第 i 个正整数代表点原创 2017-04-02 13:47:55 · 1078 阅读 · 0 评论 -
红黑树 插入 删除 代码实现 思想 与2-3-4树的联系 golang实现
介绍红黑树之前,要先了解其他几种树(二叉树,二叉排序树,平衡二叉树),红黑树就是在其他树的变形(特别是平衡二叉树,要先明白平衡二叉树,读者要先去了解一下)。一、红黑树介绍:1、性质:性质1、每个节点是红色或黑色性质2、根节点是黑色性质3、每个叶子结点(NIL)是黑色【这里的叶子结点,是指为空(NIL或NULL)的叶子结点!】性质4、如果一个节点是红色的,则它的子结点必须是黑色的性质5、从一个节点到...原创 2018-05-24 10:59:25 · 934 阅读 · 0 评论 -
树 ------------ 基础知识汇总
一、二叉树1、概念:二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。2、特殊二叉树:满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树完全二叉树:只有最下面的两层结点度能够小于2,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树,完全二叉树...原创 2018-05-08 17:20:15 · 380 阅读 · 0 评论 -
B树 插入 删除 图文 代码实现 golang实现
一、B树的定义B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。一颗m阶的B树定义如下:1、每个结点最多有m-1个关键字。2、根结点最少可以只有1个关键字。3、非根结点至少有Math.ceil(m/2)-1个关键字。4、每个结点中的关键字都按照从小到大的顺序排列,每个关键字...原创 2018-05-20 15:14:14 · 3426 阅读 · 4 评论 -
golang ----------- 平衡二叉树-AVL树
平衡二叉树的旋转:有4类,每类中又有两类1、右旋转:当插入的结点为失衡点的左孩子的左孩子,如下图所示,A,B是一种情况,虚线部分表示不存在。这两种情况都是右旋转,代码一样2、左旋转:当插入的结点为失衡点的右孩子的右孩子,如下图所示,A,B是一种情况,虚线部分表示不存在。这两种情况都是右旋转,代码一样3、先右旋转,再左旋转:当插入的结点为失衡点的右孩子的子孩子(左右孩子都行),如下图所示,A,B是一...原创 2018-05-14 21:46:24 · 1879 阅读 · 0 评论 -
golang ----------- 二叉排序树
二叉排序树又叫二叉搜索树,二叉查找树主要在删除时:分两种情况:1、如果被删除结点只有一个子结点,就直接将A的子结点连至A的父结点上,并将A删除2、如果被删除结点有两个子结点,将该结点右子数内的最小结点取代A。代码:package mainimport "fmt"type BST struct { left *BST value int right *BST}//查找元素fun...原创 2018-05-14 17:07:02 · 783 阅读 · 0 评论 -
golang ----------- 二叉树的建立
1、由标明空子树的先跟遍历序列建立一颗二叉树的操作算法var i = -1func HaveEmptyCreate(arr []int) *TreeNode{ i=i+1 if i >= len(arr){ return nil } var t TreeNode if arr[i] != 0 { t = TreeNode{nil,arr[i],nil} t.Left ...原创 2018-05-09 21:09:14 · 3215 阅读 · 0 评论 -
golang ----------- 复制二叉树
二叉树的复制:package mainimport "fmt"type TreeNode struct { Left *TreeNode Value int Right *TreeNode}//建立二叉树func TreeCreate(i int,arr []int) *TreeNode{ t := &TreeNode{nil,arr[i],nil} if i&l...原创 2018-05-09 18:56:16 · 381 阅读 · 0 评论 -
遍历二叉树(递归,非递归都有)
主要描述一下非递归,递归在下面的总的代码里有:因为非递归都用到了栈,先贴一下栈的代码const stackSize int = 22 //栈的容量type TreeNode struct { //树结点 Left *TreeNode Value int Right *TreeNode}type Stack struct { ...原创 2018-05-09 17:39:03 · 942 阅读 · 0 评论 -
快速幂
求a的m次方时,若m较大,则效率较低,运用分治法(在本博客中搜索分治法,将了解相关信息)进行快速幂计算主要思想: f^n=f^(n/2)*f^(n/2) n为偶数 f^n=f^(n/2)*f^(n/2)*f n为寄数递归算法:#include<stdio.h>double power1(double a,int m){ double f; if(m原创 2017-02-24 19:55:15 · 358 阅读 · 0 评论 -
算法提高 金属采集
问题描述 人类在火星上发现了一种新的金属!这些金属分布在一些奇怪的地方,不妨叫它节点好了。一些节点之间有道路相连,所有的节点和道路形成了一棵树。一共有 n 个节点,这些节点被编号为 1~n 。人类将 k 个机器人送上了火星,目的是采集这些金属。这些机器人都被送到了一个指定的着落点, S 号节点。每个机器人在着落之后,必须沿着道路行走。当机器人到达一个节点时,它会采集这个节点蕴藏的所有金属矿。当机器原创 2017-04-02 23:17:38 · 975 阅读 · 0 评论 -
算法训练 安慰奶牛 C语言
问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路。道路被用来连接N个牧场,牧场被连续地编号为1到N。每一个牧场都是一个奶牛的家。FJ计划除去P条道路中尽可能多的道路,但是还要保持牧场之间 的连通性。你首先要决定那些道路是需要保留的N-1条道路。第j条双向道路连接了牧场Sj和Ej(1 <= Sj <= N; 1 <= Ej <= N; Sj != Ej),而且走完它原创 2017-04-04 16:59:42 · 1061 阅读 · 0 评论 -
prim算法 最小生成树
最小生成树是最小权重生成树的简称。一个有n个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有n个结点,并且有保持图连通的最少的边普里姆算法(Prim算法) 在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和也为最小。例如如下:图B是由图A的最小生成树图A 图B算法过程详解: 存在两个集合:都存储结点原创 2017-04-04 23:37:43 · 441 阅读 · 0 评论 -
最小生成树 kruscal算法 C语言
克鲁斯卡尔算法的基本思想:在N个顶点的连通无向网中,在所有未选取的边中,在不构成构成回路的前提下,选最小边,若构成回路,取次小边,直到出现N-1条边。#include<stdio.h>#include<string.h>#include<stdlib.h>#define Max 999999int pre[Max],k=0,n,m;struct Egde{ int from,to,v;原创 2017-04-04 15:44:19 · 1394 阅读 · 0 评论 -
B树,B+树,红黑树应用场景笔记
一、B树的应用1、B树大量应用在数据库和文件系统当中。它的设计思想是,将相关数据尽量集中在一起,以便一次读取多个数据,减少硬盘操作次数。B树算法减少定位记录时所经历的中间过程,从而加快存取速度。假定一个节点可以容纳100个值,那么3层的B树可以容纳100万个数据,如果换成二叉查找树,则需要20层!假定操作系统一次读取一个节点,并且根节点保留在内存中,那么B树在100万个数据中查找目标值...原创 2018-07-18 13:01:51 · 23344 阅读 · 0 评论