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;
    }
    
    
  • 相关阅读:
    网络编程之Tcp,udp
    网络编程简介
    面向对象之高级篇 反射,元类
    面向对象 高级篇
    面向对象,继承
    初识面向对象
    包 hashlib,logging
    模块
    Dango生命周期回顾与forms组件
    Django中auth登录、注册、修改密码、退出、ORM自关联
  • 原文地址:https://www.cnblogs.com/Blithe-Chiang/p/13832895.html
Copyright © 2011-2022 走看看