C 语言编程怎么用中序和后序遍历二叉树?有没有实例代码
时间: 2023-09-11 16:05:35 浏览: 53
### 回答1:
可以使用递归的方法实现中序和后序遍历二叉树。下面是中序遍历的代码示例:
```
void inorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
printf("%d ", root->val);
inorderTraversal(root->right);
}
```
下面是后序遍历的代码示例:
```
void postorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%d ", root->val);
}
```
其中,TreeNode 是二叉树的节点结构体,val 表示节点的值,left 和 right 分别表示左右子树的指针。
### 回答2:
在C语言中,可以使用递归的方式来实现二叉树的中序遍历和后序遍历。
首先,我们需要定义二叉树节点的数据结构,可以使用如下的代码:
```
// 定义二叉树节点
typedef struct TreeNode {
int data; // 节点数据
struct TreeNode* left; // 左子树指针
struct TreeNode* right; // 右子树指针
} TreeNode;
```
接下来,我们分别实现中序遍历和后序遍历的函数。中序遍历的代码如下:
```
void inorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left); // 遍历左子树
printf("%d ", root->data); // 输出当前节点数据
inorderTraversal(root->right); // 遍历右子树
}
```
后序遍历的代码如下:
```
void postorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
postorderTraversal(root->left); // 遍历左子树
postorderTraversal(root->right); // 遍历右子树
printf("%d ", root->data); // 输出当前节点数据
}
```
接下来,我们可以构造一颗二叉树,并进行中序遍历和后序遍历的测试:
```
int main() {
// 构造二叉树
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->data = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->data = 3;
root->right->left = NULL;
root->right->right = NULL;
// 中序遍历
printf("中序遍历结果:");
inorderTraversal(root);
printf("\n");
// 后序遍历
printf("后序遍历结果:");
postorderTraversal(root);
printf("\n");
return 0;
}
```
以上代码演示了如何使用中序遍历和后序遍历二叉树,并输出遍历结果。在构造二叉树时,我们创建了一个根节点和两个子节点,其中根节点的值为1,左子节点的值为2,右子节点的值为3。运行结果为:
```
中序遍历结果:2 1 3
后序遍历结果:2 3 1
```
### 回答3:
中序遍历和后序遍历是二叉树遍历的两种方式。下面是使用C语言编写中序和后序遍历的示例代码:
中序遍历代码示例:
```c
#include<stdio.h>
#include<stdlib.h>
struct Node {
int data;
struct Node* left;
struct Node* right;
};
struct Node* createNode(int data) {
struct Node* newNode = malloc(sizeof(struct Node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
void inOrder(struct Node* node) {
if (node == NULL) {
return;
}
inOrder(node->left);
printf("%d ", node->data);
inOrder(node->right);
}
int main() {
struct Node* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
printf("中序遍历结果:");
inOrder(root);
return 0;
}
```
后序遍历代码示例:
```c
#include<stdio.h>
#include<stdlib.h>
struct Node {
int data;
struct Node* left;
struct Node* right;
};
struct Node* createNode(int data) {
struct Node* newNode = malloc(sizeof(struct Node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
void postOrder(struct Node* node) {
if (node == NULL) {
return;
}
postOrder(node->left);
postOrder(node->right);
printf("%d ", node->data);
}
int main() {
struct Node* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
printf("后序遍历结果:");
postOrder(root);
return 0;
}
```
以上示例代码创建了一个二叉树并对其进行中序和后序遍历。在创建二叉树时,使用了节点的左右子节点指针来构建树的结构。 inOrder函数根据中序遍历的顺序递归访问左子树,然后访问根节点,最后访问右子树,而postOrder函数根据后序遍历的顺序递归访问左子树、右子树,最后访问根节点。