
树与二叉树
iteye_8466
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
几种二重循环的时间复杂度
[img]http://dl.iteye.com/upload/attachment/0071/4591/42271f23-dbdc-3d08-a13c-10b12cf6719b.gif[/img]原创 2012-07-28 10:46:13 · 2862 阅读 · 0 评论 -
线段树入门学习(兼解HDU1754)
先看网上的介绍: 线段树也叫区间树,顾名思义,线段树是一种基于区间的树,每个节点表示一个“线段”或“区间”。树的根节点表示是“整体”的区间,左右子树分别表示这个区间的左半边和右半边。基本结构及性质 假设要构造一个表示N个区间大小的线段树,线段树的根节点表示区间[0,N-1],然后将区间分成两半,分别为左右子树表示,这样的线段树的节点只有2N-1个,是O(N)级别的,如图...2012-11-30 11:24:20 · 146 阅读 · 0 评论 -
线段树入门学习(二)(兼解POJ3468) JAVA
继续上文[url]http://128kj.iteye.com/blog/1738772[/url]: 在那里用链状结构实现了二叉线段树,下面程序使用一维数组以完全二叉树的方式来存储。先看一维数组存储线段树到底需要开多大的数组,网上有一个计算程序:[code="java"]import java.util.Scanner;/*线段树空间计算程序 Power By:Com...2012-11-30 16:55:13 · 135 阅读 · 0 评论 -
线段树入门学习(三)懒操作(兼解POJ1823) JAVA
继续上文"线段树入门学习(二)" [url]http://128kj.iteye.com/blog/1739064[/url]请先看题POJ1823: 旅馆有三种操作:1入住,同时给你两个数i,M,其中i表示连续房间的起始房号,M表示房间数量;2退房,同时给你两个数i,M,其中i表示连续房间的起始房号;3查询,要求输出整个旅馆中,房号相连的最大空房间数量。样例:Sam...2012-12-02 15:37:38 · 113 阅读 · 0 评论 -
利用线段树求逆序数(JAVA)
设A[1…n]是一个包含n个不同数的数组。如果在iA[j],则(i,j)就称为A中的一个逆序对(inversion) 现给出一个数列,求该数列中的逆序对数(逆序数)。最直接的暴力方法; 两层for循环就可以算出来逆序数:每遇到一个元素回头遍历寻找比其大的元素个数即可, 当然向后寻找比其小的元素个数也可以,复杂度为O(n^2),代码: int sum = 0...2012-12-04 22:46:07 · 114 阅读 · 0 评论 -
线段树求逆序数(离散化)POJ 2299
POJ2299题意: 给出长度为n的序列,每次只能交换相邻的两个元素,问至少要交换几次才使得该序列为递增序列。例如将"91054"变成"01459",最小交换6次,如果直接暴力,会超时。样例:(2次测试)Sample Input5 序列中数的个数910543 序列中数的个数1230 n=0结束Sample ...2012-12-06 08:25:18 · 170 阅读 · 0 评论 -
初步了解树状数组
一、树状数组是干什么的? 平常我们会遇到一些对数组进行维护查询的操作,比较常见的如,修改某点的值、求某个区间的和,而这两种恰恰是树状数组的强项!当然,数据规模不大的时候,对于修改某点的值是非常容易的,复杂度是O(1),但是对于求一个区间的和就要扫一遍了,复杂度是O(N),如果实时的对数组进行M次修改或求和,最坏的情况下复杂度是O(M*N),当规模增大后这是划不来的!而树状数组干同样...2012-12-07 14:18:42 · 122 阅读 · 0 评论 -
树状数组练习:POJ 2481(JAVA)
关于树状数组,请参考:[url]http://128kj.iteye.com/blog/1743633[/url] POJ 2481题意: 有n头牛(编号为1~n),每一头牛都有一个吃草区间[S, E],如果对于牛i和牛j来说,它们的吃草区间满足下面的条件则证明牛i比牛j强壮:Si ...2012-12-08 18:11:31 · 234 阅读 · 0 评论 -
树状数组练习:POJ 3067
关于树状数组,参看:[url]http://128kj.iteye.com/blog/1743633[/url]POJ3067题意: 东海岸与西海岸分别有N和M个城市,现在修高速公路连接东西海岸的城市,求交点个数。[img]http://dl.iteye.com/upload/attachment/0077/6237/018e5708-644a-3275-98bf-dd1baf...2012-12-09 17:10:25 · 109 阅读 · 0 评论 -
图的深搜+树状数组练习 POJ 3321(JAVA)
关于树状数组:参看:[url]http://128kj.iteye.com/blog/1743633[/url]POJ3321 题意: 一棵具有n个节点的树,一开始,每个节点上都有一个苹果。现在给出m组动态的操作:(C,i)是摘掉第i个节点上面的苹果(若苹果不存在,则为加上一个苹果),(Q,i)是查询以第i个节点为根的子树有几个苹果(包括第i个节点)。输入是叉之间的关系,...2012-12-11 11:13:41 · 141 阅读 · 0 评论 -
二维树状数组学习之一:彻底理解
当要频繁的对数组元素进行修改,同时又要频繁的查询数组内任一区间元素之和的时候,可以考虑使用树状数组. 通常对一维数组最直接的算法可以在O(1)时间内完成一次修改,但是需要O(n)时间来进行一次查询.而树状数组的修改和查询均可在O(log(n))的时间内完成.一、回顾一维树状数组 假设一维数组为A[i](i=1,2,...n),则与它对应的树状数组C[i](i=1,2...2012-12-12 20:54:19 · 126 阅读 · 0 评论 -
二维树状数组学习之二:练习POJ 1195
接前文:二维树状数组学习之一:彻底理解[url]http://128kj.iteye.com/blog/1746732[/url]POJ1195题意:大概题意如下:给出一个n*n的矩阵,初始化为均为0,还有关于这个矩阵的几种操作,操作如下:命令0:n (给出矩阵的维数)命令1:(X Y A) 对位于坐标(X Y)的值加A;命令2:(L B R T)求出位于L...2012-12-12 21:40:43 · 130 阅读 · 0 评论 -
大顶堆应用:POJ2010
POJ2010题意: 奶牛学校招生,c头奶牛报名,要选n头(n为奇数),学校是义务制,所以每头奶牛的学费都由学校负责。每头奶牛都由自己的考试分数和它需要花的学费,学校总共有f的资金,问合法招生方案中中间分数(即排名第(n+1)/2)最高的是多少。题解:先将所有的奶牛按照分数由低到高排序,假设k是招的奶牛中排名中间的那头,按照排序可知,[1,k-1]中的奶牛必定被招了(n-1)/2...原创 2012-12-23 20:59:57 · 149 阅读 · 0 评论 -
JAVA判断二叉树是否是二叉平衡树
[code="java"]import java.util.*; public class BinaryTree { protected Node root; public BinaryTree(Node root) { this.root = root; } ...原创 2013-01-07 18:59:36 · 155 阅读 · 0 评论 -
AVL树及JAVA实现
一棵AVL树是其每个节点的左子树和右子树的高度最多差1的二叉查找树。 在构造二叉排序树的过程中,每当插入一个结点时,首先检查是否因插入而破坏了树的平衡性,如果是因插入结点而破坏了树的平衡性,则找出其中最小不平衡子树,在保持排序树特性的前提下,调整最小不平衡子树中各结点之间的连接关系,以达到新的平衡。这样就可以得到AVL 树。 平衡调整的4种基本类型:[img]ht...原创 2012-11-26 16:34:22 · 120 阅读 · 0 评论 -
图解平衡二叉树
形态匀称的二叉树称为平衡二叉树 (Balanced binary tree) ,其严格定义是:一棵空树是平衡二叉树;若 T 是一棵非空二叉树,其左、右子树为 TL 和 TR ,令 hl 和 hr 分别为左、右子树的深度。当且仅当①TL 、 TR 都是平衡二叉树; ② | hl - hr |≤ 1;时,则 T 是平衡二叉树。【例】如图所示。[img]http://d...原创 2012-11-26 11:34:58 · 240 阅读 · 0 评论 -
队列的链式实现(java)
单链表实现队列,这里采用带头结点的单链表结构。根据单链表的特点,选择链表的头部作为队首,链表的尾部作为队尾。除了链表头结点需要通过一个引用来指向之外,还需要一个对链表尾结点的引用,以方便队列的入队操作的实现。为此一共设置了两个指针,一个队首指针和一个队尾指针,队首指针指向队首元素的前一个结点,即始终指向链表空的头结点,队尾指针指向队列当前队尾元素所在的结点。当队列为空时,队首指针与队尾指针均...原创 2012-08-04 10:38:29 · 140 阅读 · 0 评论 -
二叉树的二叉链实现及遍历
建立如图的二叉树并遍历:[img]http://dl.iteye.com/upload/attachment/0072/3033/114e5346-bf3e-3bf5-b696-7bfbf260a382.gif[/img][code="java"]import java.util.*; public class BinaryTree { protecte...原创 2012-08-14 16:29:21 · 207 阅读 · 0 评论 -
求二叉树的一条最长路径
[code="java"]import java.util.*; public class BinaryTree { protected Node root; public BinaryTree(Node root) { this.root = root; } public No...原创 2012-08-15 07:41:12 · 451 阅读 · 0 评论 -
二叉树的顺序存储实现(java)
顺序存储对完全二叉树而,简单又节省空间。对于一般二叉树,为了能用结点在数组中的相对位置表示结点之间的逻辑关系,也必须按完全二叉树的形式来存储树中的结点,这必然造成空间的浪费,随着二叉树高度的增大,空结点的数量也会急速增多。 [code="java"]/** * 顺序二叉树 * * @author liuyan */public class ArrayBinary...原创 2012-08-15 16:58:49 · 146 阅读 · 0 评论 -
二叉树的线索化(中序线索二叉树)
对于一个n个节点的链式二叉树,有n+1个空指针域,如果把这些空指针域用来指向当前节点的前驱或者后继,叫做把二叉树线索化。线索化后的二叉树遍历比较方便,不需要递归,效率快。以下使用java实现二叉树的线索化(中序线索二叉树)[code="java"]一、节点类 public class Node { private int data; private Node left;...原创 2012-08-16 21:12:48 · 379 阅读 · 0 评论 -
二叉查找树及实现
[code="java"]//二叉搜索树public class BinarySearchTree原创 2012-08-18 20:45:42 · 90 阅读 · 0 评论 -
哈夫曼树及哈夫曼编码的实现(java)
若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权.哈夫曼树的构造:假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为: (1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点); (2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、...原创 2012-08-20 11:59:08 · 302 阅读 · 0 评论 -
将二叉树所有结点的左右子树交换并输出。
[code="java"]import java.util.*; public class BinaryTree { protected Node root; public BinaryTree(Node root) { this.root = root; } ...原创 2012-08-23 08:06:22 · 581 阅读 · 0 评论 -
根据二叉树前序遍历和中序遍历的结果输出后序遍历(java)
前序遍历的第一个元素为根节点,在中序遍历中找到这个根节点,从而可以将中序遍历分为左右两个部分,左边部分为左子树的中序遍历,右边部分为右子树的中序遍历,进而也可以将前序遍历除第一个元素以外的剩余部分分为两个部分,第一个部分为左子树的前序遍历,第二个部分为右子树的前序遍历。由上述分析结果,可以递归调用构建函数,根据左子树、右子树的前序、中序遍历的结果输出后序遍历的结果。[code...原创 2012-10-07 19:58:31 · 374 阅读 · 0 评论 -
并查集入门精讲,实例2个(JAVA)
一、什么是并查集 并查集:即不相交集合。一种简单的用途广泛的集合,实现了较快的合并和判断元素所在集合的操作,应用很多,如其求无向图的连通分量个数等。最完美的应用当属:实现Kruskar算法求最小生成树。并查集实现方法: 每个集合用一棵“有根树”表示; 定义数组 int[] father int[] rank father[i...2012-10-30 14:47:54 · 163 阅读 · 0 评论 -
彻底弄懂最大堆的四种操作(图解+程序)(JAVA)
堆有最大堆和最小堆之分,最大堆就是每个节点的值都>=其左右孩子(如果有的话)值的完全二叉树。最小堆便是每个节点的值都 1) { //求出父亲的节点 int parent = index / 2; //获取相应位置的数值 int parentValue = (Integer...2012-11-17 21:50:19 · 399 阅读 · 0 评论 -
学习使用字典树(JAVA)
字典树 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。 它有3个基本特性: 1)根节点不包含字符,除根节点外每一个节点都只包含一个字符。 2)从根...2012-11-22 09:25:53 · 98 阅读 · 0 评论 -
深度优先遍历字典树(统计单词出现的个数)
例:给出一个字符文本,每行一个字符串,统计不同的字符串出现的百分比,最后按ASCII排序输出不同字符串和出现的百分比。 分析:对输入字符串建立字典树,在叶子结点记录该字符串出现的次数。这样的话,最后DFS搜索就可以查找每个字符串出现的次数。样例:Sample InputRed AlderAshAspenBasswoodAshBeechYellow B...2012-11-23 22:18:38 · 747 阅读 · 0 评论 -
求二叉树上任意两个节点的最近公共父节点
[img]http://dl.iteye.com/upload/attachment/0079/0634/5e5318b2-866d-34b4-9872-21e079df1d8d.jpg[/img]北大百练题2756: 如上图所示,由正整数1, 2, 3, ...组成了一棵无限大的二叉树。从某一个结点到根结点(编号是1的结点)都有一条唯一的路径,比如从10到根结点的路径是(10,...原创 2013-01-09 10:24:52 · 423 阅读 · 0 评论