编写建立二叉树的二叉链表存储结构(左右链表示)的程序,并以适当的形式显示和保存二叉树;
时间: 2023-04-27 16:02:58 浏览: 85
以下是建立二叉树的二叉链表存储结构的程序:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
TreeNode *createNode(int data) {
TreeNode *newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
TreeNode *createBinaryTree() {
int data;
printf("请输入节点的值(输入-1表示该节点为空):");
scanf("%d", &data);
if (data == -1) {
return NULL;
}
TreeNode *root = createNode(data);
printf("请输入%d的左子节点:\n", data);
root->left = createBinaryTree();
printf("请输入%d的右子节点:\n", data);
root->right = createBinaryTree();
return root;
}
void printBinaryTree(TreeNode *root, int level) {
if (root == NULL) {
return;
}
printBinaryTree(root->right, level+1);
for (int i = ; i < level; i++) {
printf(" ");
}
printf("%d\n", root->data);
printBinaryTree(root->left, level+1);
}
void saveBinaryTree(TreeNode *root, FILE *fp) {
if (root == NULL) {
fprintf(fp, "-1 ");
return;
}
fprintf(fp, "%d ", root->data);
saveBinaryTree(root->left, fp);
saveBinaryTree(root->right, fp);
}
int main() {
TreeNode *root = createBinaryTree();
printf("二叉树的形状:\n");
printBinaryTree(root, );
FILE *fp = fopen("binary_tree.txt", "w");
saveBinaryTree(root, fp);
fclose(fp);
return ;
}
```
程序中使用了递归的方式建立二叉树,每次输入一个节点的值,如果该值为-1,则表示该节点为空,返回NULL。否则,创建一个新节点,然后递归创建左子树和右子树,并将它们分别赋值给新节点的左右指针。
程序中还定义了两个函数,一个是打印二叉树的函数,它使用了递归的方式,先打印右子树,再打印根节点,最后打印左子树。另一个是保存二叉树的函数,它也使用了递归的方式,先保存根节点的值,再保存左子树和右子树。
最后,程序将二叉树的形状打印出来,并将二叉树保存到文件binary_tree.txt中。保存的方式是先保存根节点的值,再保存左子树和右子树,如果某个节点为空,则保存-1。