一维数组存储线段树要开多大的数组?

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   
           }   
    }   
}  



运行:
C:\ex>java  SegmentTree
请输入区间长度:
5
线段树构造完成, 共有9 节点,最后一个节点是: 9
请输入区间长度:
10
线段树构造完成, 共有19 节点,最后一个节点是: 25
请输入区间长度:
100000
线段树构造完成, 共有199999 节点,最后一个节点是: 262141

源码:

你可能感兴趣的:(java,数据结构,编程,算法)