按凹入表形式横向打印二叉树结构c语言代码。各个功能分开实现
时间: 2023-12-03 21:45:51 浏览: 57
这里给出横向打印二叉树结构的 C 语言代码,实现了以下功能:
1.创建二叉树节点
2.插入二叉树节点
3.横向打印二叉树结构
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树节点
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建二叉树节点
TreeNode *createNode(int data) {
TreeNode *node = (TreeNode *)malloc(sizeof(TreeNode));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 插入二叉树节点
TreeNode *insertNode(TreeNode *root, int data) {
if (root == NULL) {
return createNode(data);
} else if (data < root->data) {
root->left = insertNode(root->left, data);
} else {
root->right = insertNode(root->right, data);
}
return root;
}
// 计算树的高度
int getHeight(TreeNode *root) {
if (root == NULL) {
return 0;
} else {
int leftHeight = getHeight(root->left);
int rightHeight = getHeight(root->right);
return (leftHeight > rightHeight) ? (leftHeight + 1) : (rightHeight + 1);
}
}
// 打印空格
void printSpaces(int n) {
for (int i = 0; i < n; i++) {
printf(" ");
}
}
// 横向打印二叉树结构
void printTree(TreeNode *root, int level) {
if (root == NULL) {
return;
}
int height = getHeight(root);
int indent = (1 << (height - level - 1)) - 1;
printSpaces(indent);
printf("%d", root->data);
printSpaces(indent);
if (root->left || root->right) {
printf("\n");
printSpaces(indent);
printf(root->left ? "/" : " ");
printSpaces(indent * 2 - 1);
printf(root->right ? "\\" : " ");
printf("\n");
}
printTree(root->left, level + 1);
printTree(root->right, level + 1);
}
int main() {
TreeNode *root = createNode(5);
insertNode(root, 3);
insertNode(root, 7);
insertNode(root, 1);
insertNode(root, 4);
insertNode(root, 6);
insertNode(root, 9);
printTree(root, 0);
return 0;
}
```