递归算法实现哈夫曼树横向输出
时间: 2023-10-16 20:09:21 浏览: 140
好的,下面是递归算法实现哈夫曼树横向输出的代码示例:
```
// 定义哈夫曼树结点
struct HNode {
int weight; // 权值
int lchild, rchild; // 左孩子和右孩子在数组中的下标
};
// 按照权值从小到大排序
bool cmp(const HNode& a, const HNode& b) {
return a.weight < b.weight;
}
// 递归构建哈夫曼树
int buildHT(HNode huffTree[], int n) {
for (int i = 0; i < n; ++i) {
huffTree[i].lchild = huffTree[i].rchild = -1;
}
for (int i = 0; i < n - 1; ++i) {
// 找到权值最小的结点作为左孩子
int min1 = min2 = 0;
for (int j = 0; j < n; ++j) {
if (huffTree[j].weight < huffTree[min1].weight) {
min2 = min1;
min1 = j;
} else if (huffTree[j].weight < huffTree[min2].weight) {
min2 = j;
}
}
// 将找到的两个结点合并为一个新的结点
huffTree[min1].weight += huffTree[min2].weight;
huffTree[min1].lchild = min2;
huffTree[min1].rchild = -1;
huffTree[min2].rchild = min1;
}
return min1; // 返回根结点在数组中的下标
}
// 层次遍历哈夫曼树并横向输出
void printHT(HNode huffTree[], int root, int depth) {
if (root == -1) {
return;
}
for (int i = 0; i < depth; ++i) {
cout << " ";
}
cout << huffTree[root].weight << endl;
printHT(huffTree, huffTree[root].lchild, depth + 1);
printHT(huffTree, huffTree[root].rchild, depth + 1);
}
```
其中,buildHT函数用于构建哈夫曼树,printHT函数用于层次遍历哈夫曼树并横向输出。在main函数中,先读入n个权值,然后构建哈夫曼树,最后调用printHT函数输出哈夫曼树。
阅读全文