输出哈夫曼树图案函数c语言
时间: 2023-07-09 22:51:58 浏览: 97
以下是输出哈夫曼树图案的C语言函数实现:
```c
void print_huffman_tree(Node *node, char *prefix, int is_left) {
if (node == NULL) {
return;
}
char *value_str = malloc(sizeof(char) * 10);
sprintf(value_str, "%d", node->value);
// 根据 is_left 参数判断当前结点是左子树还是右子树,并在输出前缀中添加相应的符号
char *node_prefix = malloc(sizeof(char) * 20);
strcpy(node_prefix, prefix);
if (is_left == 1) {
strcat(node_prefix, "├── ");
} else {
strcat(node_prefix, "└── ");
}
// 输出当前结点的值,并递归输出左右子树
printf("%s%s\n", node_prefix, value_str);
free(value_str);
char *left_prefix = malloc(sizeof(char) * 20);
strcpy(left_prefix, prefix);
if (is_left == 1) {
strcat(left_prefix, "│ ");
} else {
strcat(left_prefix, " ");
}
print_huffman_tree(node->left, left_prefix, 1);
free(left_prefix);
char *right_prefix = malloc(sizeof(char) * 20);
strcpy(right_prefix, prefix);
if (is_left == 1) {
strcat(right_prefix, "│ ");
} else {
strcat(right_prefix, " ");
}
print_huffman_tree(node->right, right_prefix, 0);
free(right_prefix);
}
```
该函数会从根节点开始递归遍历哈夫曼树,输出每个结点的值,并在输出前缀中添加相应的符号,以形成哈夫曼树的图案。对于左子树中的结点,输出前缀中会添加竖线“│”和两个空格“ ”,对于右子树中的结点,输出前缀中只会添加两个空格“ ”。同时,为了避免内存泄漏,函数中使用了动态分配的字符数组,并在适当的时候使用 free() 函数释放内存。
阅读全文