前中后序建立一棵二叉树C语言
时间: 2023-09-15 19:05:31 浏览: 120
### 回答1:
以下是使用 C 语言实现前、中、后序建立一棵二叉树的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 前序遍历建立二叉树
TreeNode* createTreeByPreOrder() {
TreeNode* root = NULL;
int data;
scanf("%d", &data);
if (data != -1) {
root = (TreeNode*) malloc(sizeof(TreeNode));
root->data = data;
root->left = createTreeByPreOrder();
root->right = createTreeByPreOrder();
}
return root;
}
// 中序遍历建立二叉树
TreeNode* createTreeByInOrder() {
TreeNode* root = NULL;
int data;
scanf("%d", &data);
if (data != -1) {
root = (TreeNode*) malloc(sizeof(TreeNode));
root->left = NULL;
root->right = NULL;
root->data = data;
root->left = createTreeByInOrder();
root->right = createTreeByInOrder();
}
return root;
}
// 后序遍历建立二叉树
TreeNode* createTreeByPostOrder() {
TreeNode* root = NULL;
int data;
scanf("%d", &data);
if (data != -1) {
root = (TreeNode*) malloc(sizeof(TreeNode));
root->left = NULL;
root->right = NULL;
root->left = createTreeByPostOrder();
root->right = createTreeByPostOrder();
root->data = data;
}
return root;
}
// 前序遍历输出二叉树
void preOrderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->data);
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
return;
}
// 中序遍历输出二叉树
void inOrderTraversal(TreeNode* root) {
if (root != NULL) {
inOrderTraversal(root->left);
printf("%d ", root->data);
inOrderTraversal(root->right);
}
return;
}
// 后序遍历输出二叉树
void postOrderTraversal(TreeNode* root) {
if (root != NULL) {
postOrderTraversal(root->left);
postOrderTraversal(root->right);
printf("%d ", root->data);
}
return;
}
int main() {
TreeNode* root = NULL;
// 使用前序遍历建立二叉树
printf("请输入前序遍历序列建立二叉树:\n");
root = createTreeByPreOrder();
printf("前序遍历输出建立的二叉树:\n");
preOrderTraversal(root);
printf("\n中序遍历输出建立的二叉树:\n");
inOrderTraversal(root);
printf("\n后序遍历输出建立的二叉树:\n");
postOrderTraversal(root);
// 释放二叉树内存
free(root);
root = NULL;
return 0;
}
```
在运行程序时,可以根据提示输入对应的序列,程序会自动建立二叉树并输出对应的遍历结果。值得注意的是,程序中的 `-1` 表示输入结束标志,即输入序列到此结束。
### 回答2:
在C语言中,可以通过定义一个二叉树的结构体来表示二叉树的节点。结构体包括一个整型变量data用于存储节点的值,以及两个指向子节点的指针left和right。
首先,我们需要定义一个函数用于创建二叉树节点。该函数接收一个整型值作为参数,并返回一个新创建的二叉树节点。代码如下:
```
#include <stdio.h>
#include <stdlib.h>
// 二叉树节点的结构体
struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
};
// 创建二叉树节点的函数
struct TreeNode* createNode(int value) {
struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
newNode->data = value;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
```
接下来,我们可以分别实现前序遍历、中序遍历和后序遍历来建立二叉树。
前序遍历建立二叉树意味着根节点会先被访问,然后再递归构建左子树和右子树。代码如下:
```
struct TreeNode* buildTreePreorder() {
int value;
scanf("%d", &value);
if (value == -1) { // 输入-1表示该节点为空
return NULL;
}
struct TreeNode* root = createNode(value);
root->left = buildTreePreorder();
root->right = buildTreePreorder();
return root;
}
```
中序遍历建立二叉树意味着根节点会在左子树和右子树之间构建。代码如下:
```
struct TreeNode* buildTreeInorder() {
int value;
scanf("%d", &value);
if (value == -1) { // 输入-1表示该节点为空
return NULL;
}
struct TreeNode* root = createNode(value);
root->left = buildTreeInorder();
root->right = buildTreeInorder();
return root;
}
```
后序遍历建立二叉树意味着根节点会在左子树和右子树之后构建。代码如下:
```
struct TreeNode* buildTreePostorder() {
int value;
scanf("%d", &value);
if (value == -1) { // 输入-1表示该节点为空
return NULL;
}
struct TreeNode* root = createNode(value);
root->left = buildTreePostorder();
root->right = buildTreePostorder();
return root;
}
```
注意,在这里我们假设输入-1表示该节点为空。你可以根据具体的需要更改这个判断条件。
通过调用上述函数,我们可以得到一棵二叉树。比如,可以在main函数中调用函数buildTreePreorder(),buildTreeInoder()或buildTreePostorder()来构建树。
### 回答3:
在C语言中,可以通过定义一个二叉树结点结构体来表示二叉树的结点,结构体中包含左子树、右子树和值等成员。然后,可以根据前序、中序或后序遍历的结果来建立一棵二叉树。
1. 前序建立二叉树:
前序建立二叉树的过程是根据先访问根结点的顺序来建立二叉树。首先,从输入中获取根结点的值,并创建一个新的结点。然后,分别递归建立左子树和右子树,直到遇到空结点为止。
2. 中序建立二叉树:
中序建立二叉树的过程是根据左子树、根结点和右子树的顺序来建立二叉树。首先,递归建立左子树,然后从输入中获取根结点的值,并创建一个新的结点。最后,递归建立右子树。
3. 后序建立二叉树:
后序建立二叉树的过程是根据先访问左子树和右子树,最后访问根结点的顺序来建立二叉树。首先,递归建立左子树,然后递归建立右子树。最后,从输入中获取根结点的值,并创建一个新的结点。
以上是建立二叉树的基本步骤,具体实现可以通过递归函数来完成。在每次递归调用中,需要读取或传递树的结点值,并创建新结点。当遇到空结点时,返回空指针。这样可以根据给定的遍历结果构建一棵二叉树。
阅读全文