Share Pastebin
Guest
Public paste!

Micke_rekurs

By: a guest | Mar 18th, 2010 | Syntax: Java | Size: 1.31 KB | Hits: 49 | Expires: Never
Copy text to clipboard
  1. public void makeTree(char[] p)
  2.         {
  3.                 int freq[] = freqCount(p); //Räknar frekvensen för varje ascii tecken i input
  4.                 Node root[] = new Node[NASCII];
  5.                 int n = 0;
  6.                 for(char i=0; i<freq.length; i++) //Skapar Nodes för ascii tecken i input
  7.                 {
  8.             if(freq[i] != 0)
  9.             {
  10.                 root[n++] = new Node(i, freq[i]);
  11.             }
  12.                 }
  13.                 while(n > 1) {
  14.             int i0 = 0;    // index för de två noderna med lägst weight
  15.             int i1 = 1;    
  16.             if(root[i0].weight > root[i1].weight) {
  17.                 i0 = 1;
  18.                 i1 = 0;
  19.             }
  20.             for(int i=2; i<n; i++)
  21.             {
  22.                 if(root[i].weight < root[i0].weight) {
  23.                     i1 = i0;
  24.                     i0 = i;
  25.                 } else if(root[i].weight < root[i1].weight)
  26.                     i1 = i;
  27.             }
  28.    
  29.             int weight = root[i0].weight + root[i1].weight; //Adderar vikterna för i1 och i0 som blir vikten för deras över nod
  30.             root[i0] = new Node(root[i0], root[i1], weight); //Skapar noden
  31.            
  32.             for(int i=i1+1; i<n; i++) //Tar bort i1 då den nu lagts till i trädet
  33.             {
  34.                 root[i-1] = root[i];
  35.             }
  36.            
  37.             n--;
  38.         }
  39.                
  40.                 this.root = root[0];
  41.                
  42.         }