Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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;
        }