2014-04-13 6 views
1
abstract class HuffmanTree1 implements Comparable<HuffmanTree1> 
{ 
public final int frequency; 
public HuffmanTree1(int freq) 
{ 
frequency = freq; 
} 


public int compareTo(HuffmanTree1 tree) 
{ 
return frequency - tree.frequency; 
} 
} 




class HuffmanLeaf1 extends HuffmanTree1 
{ 
public final char value; 


public HuffmanLeaf1(int freq, char val) 
{ 
    super(freq); 
    value = val; 
} 
} 




class HuffmanNode1 extends HuffmanTree1 
{ 
    public final HuffmanTree1 left, right; 

    public HuffmanNode1(HuffmanTree1 l, HuffmanTree1 r) 
{ 
    super(l.frequency + r.frequency); 
    left = l; 
    right = r; 
} 
} 




public class SimpleHuffmanCode 
{ 
static int ctr=0; 
static String[] s=new String[50]; 

public static HuffmanTree1 buildTree(int[] charFreqs) 
{ 
PriorityQueue<HuffmanTree1> trees = new PriorityQueue<HuffmanTree1>(); 
for (int i = 0; i < charFreqs.length; i++) 
if (charFreqs[i] > 0) 
trees.offer(new HuffmanLeaf1(charFreqs[i], (char)i)); 
assert trees.size() > 0; 
while (trees.size() > 1) 
{ 
HuffmanTree1 a = trees.poll(); 
HuffmanTree1 b = trees.poll(); 
trees.offer(new HuffmanNode1(a, b)); 
} 
return trees.poll(); 
} 



public static void main(String[] args) throws IOException 
{ 
File file = new File("test.txt"); 
int c[]=count_freq(file); 
HuffmanTree1 tree = buildTree(c); 
} 

"hello world"라는 문자열이 있다고 가정합니다. 이제 각 캐릭터의 빈도를 계산 한 다음 허프 먼 트리를 만들었습니다. 이제 어떻게 thr huffman 트리를 다른 프로그램에서 사용할 수 있도록 atext 파일에 저장할 수 있습니까 ?? 모든 제안 ..재사용을 위해 텍스트 파일에 트리 데이터 구조를 저장하는 방법

답변

1

inorderpreorder 또는 postorder 중 하나를 파일에 포함 한 다음 트래버스 2 개를 사용하여 트리를 재구성하십시오.

여기 내가 preorderinorder 및 순회 고려한 : struct node *root = buildTree(in, pre, 0, len - 1);

struct node* buildTree(char in[], char pre[], int inStrt, int inEnd) 
{ 
    static int preIndex = 0; 

    if(inStrt > inEnd) 
    return NULL; 

    /* Pick current node from Preorder traversal using preIndex 
    and increment preIndex */ 
    struct node *tNode = newNode(pre[preIndex++]); 

    /* If this node has no children then return */ 
    if(inStrt == inEnd) 
    return tNode; 

    /* Else find the index of this node in Inorder traversal */ 
    int inIndex = search(in, inStrt, inEnd, tNode->data); 

    /* Using index in Inorder traversal, construct left and 
    right subtress */ 
    tNode->left = buildTree(in, pre, inStrt, inIndex-1); 
    tNode->right = buildTree(in, pre, inIndex+1, inEnd); 

    return tNode; 
} 

통화 여기서 LEN = 탐색 어레이의 길이.

+0

자바 코드를 찾고 있었는데 .. 어쨌든 고맙습니다. – Swayambhu

+0

안녕하세요, 먼저 댓글을 작성한 사람이 당신의 의견을 삭제했지만 개체 직렬화에 대한 귀하의 아이디어가 친구와 함께했습니다. 너는 누구보다도 .. – Swayambhu