最近写了huffman树的代码,写在这里记录下来
在写huffman树过程中,我认为难点在于找出权值最小的两棵子树,即函数SeleteMin(int &x, int &y,int s,int e ):
在该函数中先遍历找出第一个有效权值,即他的父节点值为-1,并把他的序号赋给x,y,退出;
再继续遍历,遇到父节点值为-1:
如果i权值比x权值小,则y=x,x=i;
再如果i权值比y小或者x=y时,则y=i;
又由于我在函数参数上使用了引用便不用返回值了,直接改变了xy的值。
源代码:
#include "stdafx.h"
#include<iostream>
#include<iomanip>
using namespace std;
#define N 10
struct node
{
int parent, lchild, rchild;
int weight;
};
class Huffman
{
public:
Huffman();
~Huffman();
void createhuffman();
void seleteMin(int &x, int &y,int s,int e );
int get();
void print();
void printl(int a, int