线段树入门学习(二)(兼解POJ3468) JAVA
2013-02-27 22:44
591 查看
继续上文http://128kj.iteye.com/blog/1738772:
在那里用链状结构实现了二叉线段树,下面程序使用一维数组以完全二叉树的方式来存储。
先看一维数组存储线段树到底需要开多大的数组,网上有一个计算程序:
Java代码
import java.util.Scanner;
/*线段树空间计算程序 Power By:Comzyh*/
class segment {//线段树节点
int b,e;
}
public class SegmentTree{//线段树,用数组实现
static int M=5000000;
segment seg[];
int Nnode;//节点数
int LastNode;//最后一个节点
public SegmentTree(){
seg=new segment[M];
for(int i=0;i<M;i++)
seg[i]=new segment();
}
void build(int b,
int e, int root){//构造线段树
Nnode++;
if (root>LastNode)
LastNode=root;
seg[root].b=b;
seg[root].e=e;
if (b==e)
return;
int mid =(b+e)>>1;
build(b,mid,root<<1);
build(mid+1,e,(root<<1)+1);
}
public int getNnode(){
return Nnode;
}
public int getLastNode(){
return LastNode;
}
public static
void main(String args[]){
Scanner in=new Scanner(System.in);
int N;
while (true){
System.out.printf("请输入区间长度:\n");
N=in.nextInt();
if (N==0)
break;
SegmentTree st=new SegmentTree();
st.build(1,N,1);
System.out.printf("线段树构造完成, 共有%d 节点,最后一个节点是: %d\n",st.getNnode(),st.getLastNode());
//注意:节点个数总是2N-1
}
}
}
在那里用链状结构实现了二叉线段树,下面程序使用一维数组以完全二叉树的方式来存储。
先看一维数组存储线段树到底需要开多大的数组,网上有一个计算程序:
Java代码
import java.util.Scanner;
/*线段树空间计算程序 Power By:Comzyh*/
class segment {//线段树节点
int b,e;
}
public class SegmentTree{//线段树,用数组实现
static int M=5000000;
segment seg[];
int Nnode;//节点数
int LastNode;//最后一个节点
public SegmentTree(){
seg=new segment[M];
for(int i=0;i<M;i++)
seg[i]=new segment();
}
void build(int b,
int e, int root){//构造线段树
Nnode++;
if (root>LastNode)
LastNode=root;
seg[root].b=b;
seg[root].e=e;
if (b==e)
return;
int mid =(b+e)>>1;
build(b,mid,root<<1);
build(mid+1,e,(root<<1)+1);
}
public int getNnode(){
return Nnode;
}
public int getLastNode(){
return LastNode;
}
public static
void main(String args[]){
Scanner in=new Scanner(System.in);
int N;
while (true){
System.out.printf("请输入区间长度:\n");
N=in.nextInt();
if (N==0)
break;
SegmentTree st=new SegmentTree();
st.build(1,N,1);
System.out.printf("线段树构造完成, 共有%d 节点,最后一个节点是: %d\n",st.getNnode(),st.getLastNode());
//注意:节点个数总是2N-1
}
}
}
相关文章推荐
- 线段树入门学习(三)懒操作(兼解POJ1823) JAVA
- 马士兵 Java入门到精通学习记录 (一)
- Java学习从入门到精通
- java学习、java入门:JAVA编程题练习
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (作者:剽悍一小兔)前五节学习随笔
- java入门、java学习必读,WEB前端学习路线
- Java学习从入门到精通(一/八)安装篇
- JAVA从菜鸟【入门】到新手【实习】一一学习中的小技巧,自身的案例分析
- java入门程序100例学习笔记(005递归调用)
- JAVA编程思想学习 --- 第一章 (对象入门)
- 跪求学习java的易懂入门教学资料
- Java学习从入门到精通
- Java入门学习指导之最佳方向-Java基础-Java-编程开发
- Java学习从入门到精通 ()
- (JAVA SE 学习笔记)Java.SE.第001讲.Java.SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行
- Java学习从入门到精通
- Java入门最佳学习路径,
- JavaSE入门学习31:Java常用类之Math类
- 【java学习之旅】——JSP入门
- Java学习从入门到精通