zoukankan      html  css  js  c++  java
  • 哈夫曼树的构建算法之找出两个最小的子树的下标

    struct Node
    {
        int weight;
        int parent;
        int lChild;
        int rChild;
    };
    
    typedef struct Node NODE;
    
    typedef NODE *HuffmanTree;
    
    
    
    int selector(HuffmanTree HT, int n)
    {
        int min = -1;
        bool first = true;
    
        for (int i = 1; i <= n; i++)
        {
            if (HT[i].parent == 0)
            {
                if (first)      // 只有在 min 即将第一次被赋值的时候,才会进入
                {
                    min = i;
                    first = false;
                }
                else {          // min 已经被赋值过了,进入这个分支
                    if (HT[i].weight < HT[min].weight)
                    {
                        min = i;
                    }
                }
            }
        }
        
        return min;
    }
    
    // 从没有选过的树里面,选择两个weight最小的。把他们的下标放在 s1和s2所在的空间
    bool select(HuffmanTree HT, int *s1, int *s2, int n)
    {
        int min = selector(HT, n);
        if (min == -1)
            return false;
    
        HT[min].parent = -1;     // 设置一个值,临时地表示这个节点已经被选中了
    
        int subMin = selector(HT, n);
    
        if (subMin == -1)
            return false;
    
        HT[min].parent = 0;     // 恢复未被选中的状态
    
        *s1 = min;      // 左边的比较小
        *s2 = subMin;   // 右边的大一点
        return true;
    }
    
    
  • 相关阅读:
    2021年1月4号
    2021年1月3号
    2021年1月2日
    2021年1月1日
    Jenkins定时构建与轮询SCM
    2017-08-22校验
    2017-08-21xlVBASplitSheetsSameTime
    20170821xlVBA跨表公式套用
    20170821xlVBA隐藏空行
    20170814xlVBA限定日期按客户分类汇总
  • 原文地址:https://www.cnblogs.com/Blithe-Chiang/p/13832895.html
Copyright © 2011-2022 走看看