c语言实现 二元组建树 实践树的创建
时间: 2023-07-15 18:11:32 浏览: 44
二元组建树,也叫二叉树,是一种常见的数据结构,它由节点组成,每个节点最多有两个子节点。在C语言中,可以使用指针来实现二叉树的创建。
首先,定义一个结构体表示二叉树的节点:
```
struct TreeNode {
int value;
struct TreeNode *left;
struct TreeNode *right;
};
```
其中,`value` 表示节点的值,`left` 和 `right` 分别表示左子节点和右子节点。
接着,可以编写一个函数来创建二叉树。这里以前序遍历的方式输入各个节点的值,如果输入的值为-1,则表示该节点为空。
```
struct TreeNode* createTree() {
int value;
scanf("%d", &value);
if (value == -1) {
return NULL;
}
struct TreeNode *node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
node->value = value;
node->left = createTree();
node->right = createTree();
return node;
}
```
在这个函数中,首先读入一个值,如果该值为-1,则返回空指针,表示该节点为空;否则,创建一个新节点,读入该节点的左子树和右子树,最终返回该节点的指针。
下面是一个完整的例子,可以输入前序遍历序列来创建二叉树,并输出中序遍历和后序遍历序列:
```
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
int value;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* createTree() {
int value;
scanf("%d", &value);
if (value == -1) {
return NULL;
}
struct TreeNode *node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
node->value = value;
node->left = createTree();
node->right = createTree();
return node;
}
void inorderTraversal(struct TreeNode *root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
printf("%d ", root->value);
inorderTraversal(root->right);
}
void postorderTraversal(struct TreeNode *root) {
if (root == NULL) {
return;
}
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%d ", root->value);
}
int main() {
struct TreeNode *root = createTree();
printf("Inorder traversal: ");
inorderTraversal(root);
printf("\n");
printf("Postorder traversal: ");
postorderTraversal(root);
printf("\n");
return 0;
}
```
输入格式为一个前序遍历序列,例如:
```
1 2 4 -1 -1 5 -1 -1 3 -1 6 7 -1 -1 -1
```
表示如下的二叉树:
```
1
/ \
2 3
/ / \
4 6 7
\
5
```
程序输出结果为:
```
Inorder traversal: 4 2 5 1 6 3 7
Postorder traversal: 4 5 2 6 7 3 1
```