2011-08-07 62 views
-1
while(count != 25) { 
    tail = head; 
    new_node = (binary_node*)malloc(sizeof(binary_node)); 
    while(tail->next != NULL) 
     tail = tail->next; 
    tail->next = new_node; 
    new_node->element.frequency = (p->element.frequency + q->element.frequency); 
    new_node->LSON = p; 
    new_node->LSON->RTAG = 0; 
    new_node->RSON = q; 
    new_node->RSON->RTAG = 1; 
    head = new_node; 
    n = n - 1; 
    head = q->next; 
    sort(n, head); 


    p = head; 
    q = p->next; 
    count++; 
} 

上面的代碼應該生成一個huffman樹。但是,形成的二叉樹不正確。所有包含字母的節點應該是沒有兒子的葉或節點,但一些字母節點仍然有兒子。代碼有什麼問題?不正確的二叉樹

+1

正在做作業嗎? – erisco

+0

nope。我現在只想創建一個哈夫曼樹,因爲我不能在課堂上做。 – shinshin32

+7

我沒有看到單個變量聲明,也沒有看到任何註釋。雖然我可以猜測一些類型和含義,但通過ESP進行調試並不好玩。請顯示更完整的代碼,並請添加有意義的評論。 – abelenky

回答

1

malloc返回給你一個充滿垃圾的內存區域。

由於您從未爲new_node設置過它不是字母節點,所以有時您會發現garabage指出它實際上是一個字母節點。

驗證的後果:您應該找到更多的原始字母節點。

+0

我試着爲new_node設置一個字符,以便它不會成爲字母表節點。但它仍然是一樣的。仍然有一個節點似乎是一個字母節點,但有一個左右兒子 – shinshin32