c:将二叉树以横向树形结构输出显示。
时间: 2024-02-25 21:51:56 浏览: 87
可以通过递归地遍历二叉树,同时记录每个节点的深度和位置信息,然后根据深度和位置信息在输出时进行对齐,就可以实现将二叉树以横向树形结构输出显示的效果。
以下是一个C语言的实现示例,假设二叉树的节点结构如下:
```
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
```
代码如下:
```
void printTree(TreeNode* root) {
int depth = getDepth(root); // 获取二叉树的深度
int width = (1 << depth) - 1; // 计算二叉树的宽度
char** arr = (char**)malloc(sizeof(char*) * depth); // 创建一个二维字符数组,用于存储每个节点的值
for (int i = 0; i < depth; i++) {
arr[i] = (char*)malloc(sizeof(char) * (width + 1));
memset(arr[i], ' ', width); // 初始化为全空格
arr[i][width] = '\0'; // 结尾加上'\0'
}
printNode(root, arr, 0, 0, width - 1); // 递归遍历二叉树,记录每个节点的位置信息
for (int i = 0; i < depth; i++) {
printf("%s\n", arr[i]); // 输出每一行
free(arr[i]);
}
free(arr);
}
int getDepth(TreeNode* root) {
if (root == NULL) {
return 0;
}
int leftDepth = getDepth(root->left);
int rightDepth = getDepth(root->right);
return 1 + (leftDepth > rightDepth ? leftDepth : rightDepth);
}
void printNode(TreeNode* root, char** arr, int depth, int left, int right) {
if (root == NULL) {
return;
}
int mid = (left + right) / 2;
arr[depth][mid] = root->val + '0'; // 将节点的值存储在二维字符数组中
printNode(root->left, arr, depth + 1, left, mid - 1); // 递归遍历左子树
printNode(root->right, arr, depth + 1, mid + 1, right); // 递归遍历右子树
}
```
使用示例:
```
TreeNode* root = createTree(); // 创建一个二叉树
printTree(root); // 输出二叉树的横向树形结构
```
其中 `createTree()` 函数需要根据具体情况实现,用于创建一棵二叉树。
阅读全文