按先序 中序 后序 遍历输出二叉树的所有结点c语言代码实现
时间: 2023-09-11 19:05:06 浏览: 102
### 回答1:
以下是基于递归方式实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建新结点
TreeNode* newNode(int val) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
// 先序遍历
void preorder(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
preorder(root->left);
preorder(root->right);
}
// 中序遍历
void inorder(TreeNode* root) {
if (root == NULL) {
return;
}
inorder(root->left);
printf("%d ", root->val);
inorder(root->right);
}
// 后序遍历
void postorder(TreeNode* root) {
if (root == NULL) {
return;
}
postorder(root->left);
postorder(root->right);
printf("%d ", root->val);
}
int main() {
// 创建示例二叉树
TreeNode* root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
root->right->left = newNode(6);
root->right->right = newNode(7);
// 输出各种遍历结果
printf("Preorder traversal: ");
preorder(root);
printf("\n");
printf("Inorder traversal: ");
inorder(root);
printf("\n");
printf("Postorder traversal: ");
postorder(root);
printf("\n");
return 0;
}
```
输出结果为:
```
Preorder traversal: 1 2 4 5 3 6 7
Inorder traversal: 4 2 5 1 6 3 7
Postorder traversal: 4 5 2 6 7 3 1
```
### 回答2:
按照先序遍历、中序遍历和后序遍历输出二叉树的所有节点的C语言代码实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
// 结点的数据结构
typedef struct Node {
char data;
struct Node* left;
struct Node* right;
} Node;
// 创建结点
Node* createNode(char data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
}
// 先序遍历
void preOrderTraversal(Node* root) {
if (root != NULL) {
printf("%c ", root->data);
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
}
// 中序遍历
void inOrderTraversal(Node* root) {
if (root != NULL) {
inOrderTraversal(root->left);
printf("%c ", root->data);
inOrderTraversal(root->right);
}
}
// 后序遍历
void postOrderTraversal(Node* root) {
if (root != NULL) {
postOrderTraversal(root->left);
postOrderTraversal(root->right);
printf("%c ", root->data);
}
}
int main() {
// 创建二叉树
Node* A = createNode('A');
Node* B = createNode('B');
Node* C = createNode('C');
Node* D = createNode('D');
Node* E = createNode('E');
Node* F = createNode('F');
A->left = B;
A->right = C;
B->left = D;
B->right = E;
C->right = F;
// 先序遍历
printf("先序遍历结果:");
preOrderTraversal(A);
printf("\n");
// 中序遍历
printf("中序遍历结果:");
inOrderTraversal(A);
printf("\n");
// 后序遍历
printf("后序遍历结果:");
postOrderTraversal(A);
printf("\n");
return 0;
}
```
在代码中,我们首先定义了一个结构体`Node`来表示二叉树的结点,其中包含了结点的数据和左右子节点的指针。然后,我们实现了三个函数来分别实现先序遍历、中序遍历和后序遍历。在每个函数中,我们使用递归的方式对二叉树进行遍历,并在每个结点处输出其数据。
在主函数中,我们创建了一个简单的二叉树,并依次调用先序、中序和后序遍历函数来输出二叉树的所有结点。最后,我们在控制台打印出遍历结果。
请注意,以上代码只是演示了如何实现二叉树的三种遍历方式,具体的二叉树构建过程需要根据实际情况进行调整。
### 回答3:
以下是使用C语言实现先序、中序和后序遍历输出二叉树的代码:
先序遍历(Preorder Traversal):
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* left;
struct Node* right;
};
// 先序遍历函数
void preorderTraversal(struct Node* node) {
if (node != NULL) {
printf("%d ", node->data); // 输出当前结点的数据
preorderTraversal(node->left); // 递归遍历左子树
preorderTraversal(node->right); // 递归遍历右子树
}
}
int main() {
// 创建示例二叉树
struct Node* root = (struct Node*)malloc(sizeof(struct Node));
root->data = 1;
root->left = (struct Node*)malloc(sizeof(struct Node));
root->left->data = 2;
root->right = (struct Node*)malloc(sizeof(struct Node));
root->right->data = 3;
root->left->left = (struct Node*)malloc(sizeof(struct Node));
root->left->left->data = 4;
root->left->right = (struct Node*)malloc(sizeof(struct Node));
root->left->right->data = 5;
// 输出先序遍历结果
printf("Preorder Traversal: ");
preorderTraversal(root);
return 0;
}
```
中序遍历(Inorder Traversal):
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* left;
struct Node* right;
};
// 中序遍历函数
void inorderTraversal(struct Node* node) {
if (node != NULL) {
inorderTraversal(node->left); // 递归遍历左子树
printf("%d ", node->data); // 输出当前结点的数据
inorderTraversal(node->right); // 递归遍历右子树
}
}
int main() {
// 创建示例二叉树,代码同先序遍历中的创建部分
// 输出中序遍历结果
printf("Inorder Traversal: ");
inorderTraversal(root);
return 0;
}
```
后序遍历(Postorder Traversal):
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* left;
struct Node* right;
};
// 后序遍历函数
void postorderTraversal(struct Node* node) {
if (node != NULL) {
postorderTraversal(node->left); // 递归遍历左子树
postorderTraversal(node->right); // 递归遍历右子树
printf("%d ", node->data); // 输出当前结点的数据
}
}
int main() {
// 创建示例二叉树,代码同先序遍历中的创建部分
// 输出后序遍历结果
printf("Postorder Traversal: ");
postorderTraversal(root);
return 0;
}
```
以上代码演示了如何创建一个二叉树,并分别使用先序、中序和后序遍历函数进行遍历操作。注意,这里的二叉树结点是手动创建的示例,你可以根据需要修改或扩展代码来创建你自己的二叉树。
阅读全文