按凹入表形式横向打印二叉树结构c语言代码
时间: 2023-07-29 18:11:17 浏览: 107
二叉树的凹入表打印
以下是实现二叉树按凹入表形式横向打印的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_DEPTH 100
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 计算树的深度
int calcDepth(TreeNode *root) {
if (root == NULL) {
return 0;
}
int leftDepth = calcDepth(root->left);
int rightDepth = calcDepth(root->right);
return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
}
// 按凹入表形式打印二叉树
void printTree(TreeNode *root) {
if (root == NULL) {
return;
}
int depth = calcDepth(root);
int maxWidth = (1 << depth) - 1;
char **res = (char **)malloc(sizeof(char *) * depth);
for (int i = 0; i < depth; i++) {
res[i] = (char *)malloc(sizeof(char) * (maxWidth + 1));
memset(res[i], ' ', maxWidth);
res[i][maxWidth] = '\0';
}
// 递归填充凹入表
void fillTable(TreeNode *node, int depth, int pos, int offset) {
if (node == NULL) {
return;
}
int idx = pos + offset;
res[depth][idx] = node->val + '0';
fillTable(node->left, depth + 1, pos, offset / 2);
fillTable(node->right, depth + 1, idx + 1, offset / 2);
}
fillTable(root, 0, 0, maxWidth / 2);
// 打印凹入表
for (int i = 0; i < depth; i++) {
printf("%s\n", res[i]);
free(res[i]);
}
free(res);
}
// 创建二叉树
TreeNode *createTree(int *arr, int size, int pos) {
if (pos >= size || arr[pos] == 0) {
return NULL;
}
TreeNode *root = (TreeNode *)malloc(sizeof(TreeNode));
root->val = arr[pos];
root->left = createTree(arr, size, pos * 2 + 1);
root->right = createTree(arr, size, pos * 2 + 2);
return root;
}
int main() {
int arr[] = {1, 2, 3, 0, 5, 6, 7}; // 示例二叉树
int size = sizeof(arr) / sizeof(arr[0]);
TreeNode *root = createTree(arr, size, 0);
printTree(root); // 按凹入表形式打印二叉树
return 0;
}
```
其中,`calcDepth` 函数计算树的深度,`printTree` 函数按凹入表形式打印二叉树,`fillTable` 函数递归填充凹入表。`createTree` 函数用于创建二叉树,这里使用了一个示例二叉树进行测试,你可以根据需要修改。
阅读全文