/// <summary> /// /// </summary> Vocabulary InitializationHalfmanTree() { int i; VocabularyChain l, p1, p2; Vocabulary h, h1, h2; //创建seed结点 l = new VocabularyChain(); // for (i = 0; i < VocaSize; i++) { OrderWeight(l, VocaArray[i]); //hnew = new Vocabulary(); //hnew.Weight = VocaArray[i].Weight; //OrderWeight(l, hnew); } //处理二叉树结点超过两层的情况 while (l.NextVocabulary.NextVocabulary != null) { p1 = l.NextVocabulary; p2 = p1.NextVocabulary; l.NextVocabulary = p2.NextVocabulary; h1 = p1.RootVocabulary; h2 = p2.RootVocabulary; h = new Vocabulary(); h.Weight = h1.Weight + h2.Weight; h.LeftChild = h1; h.RightChild = h2; OrderWeight(l, h); } // p1 = l.NextVocabulary; h = p1.RootVocabulary; return(h); }
/// <summary> /// 二叉树结点按权值从小到大的顺序挂在一颗树上 /// </summary> /// <param name="l">树根结点或者树</param> /// <param name="ht">新增结点</param> void OrderWeight(VocabularyChain l, Vocabulary ht) { VocabularyChain ltmp, lnew, lp; lnew = new VocabularyChain(); lnew.RootVocabulary = ht; // lp = l; ltmp = lp.NextVocabulary; // while (ltmp != null) { if (lnew.RootVocabulary.Weight > ltmp.RootVocabulary.Weight) { ltmp = ltmp.NextVocabulary; lp = lp.NextVocabulary; } else { ltmp = null; } } lnew.NextVocabulary = lp.NextVocabulary; lp.NextVocabulary = lnew; }