Micke_rekurs
By: a guest | Mar 18th, 2010 | Syntax:
Java | Size: 1.31 KB | Hits: 49 | Expires: Never
public void makeTree(char[] p)
{
int freq[] = freqCount(p); //Räknar frekvensen för varje ascii tecken i input
Node root[] = new Node[NASCII];
int n = 0;
for(char i=0; i<freq.length; i++) //Skapar Nodes för ascii tecken i input
{
if(freq[i] != 0)
{
root[n++] = new Node(i, freq[i]);
}
}
while(n > 1) {
int i0 = 0; // index för de två noderna med lägst weight
int i1 = 1;
if(root[i0].weight > root[i1].weight) {
i0 = 1;
i1 = 0;
}
for(int i=2; i<n; i++)
{
if(root[i].weight < root[i0].weight) {
i1 = i0;
i0 = i;
} else if(root[i].weight < root[i1].weight)
i1 = i;
}
int weight = root[i0].weight + root[i1].weight; //Adderar vikterna för i1 och i0 som blir vikten för deras över nod
root[i0] = new Node(root[i0], root[i1], weight); //Skapar noden
for(int i=i1+1; i<n; i++) //Tar bort i1 då den nu lagts till i trädet
{
root[i-1] = root[i];
}
n--;
}
this.root = root[0];
}