用C语言编写代码 二叉树的遍历 建立二叉树,然后实现:输出先序遍历、中序遍历、后序遍历的结果。 输入说明第一行:结点个数n。 以下行:每行3个数,第一个是父亲,后两个依次为左右孩子,0表示空。 输出说明根、先中后序遍历结果。
时间: 2024-11-10 17:14:50 浏览: 11
在C语言中,我们可以创建一个简单的二叉树结构,并分别实现先序遍历(根-左-右)、中序遍历(左-根-右)和后序遍历(左-右-根)。这里是一个基础的例子:
```c
#include <stdio.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建新节点
TreeNode* createNode(int data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = data;
newNode->left = newNode->right = NULL;
return newNode;
}
// 先序遍历
void preOrderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->val); // 输出当前节点
preOrderTraversal(root->left); // 遍历左子树
preOrderTraversal(root->right); // 遍历右子树
}
}
// 中序遍历
void inOrderTraversal(TreeNode* root) {
if (root != NULL) {
inOrderTraversal(root->left); // 遍历左子树
printf("%d ", root->val); // 输出当前节点
inOrderTraversal(root->right); // 遍历右子树
}
}
// 后序遍历
void postOrderTraversal(TreeNode* root) {
if (root != NULL) {
postOrderTraversal(root->left); // 遍历左子树
postOrderTraversal(root->right); // 遍历右子树
printf("%d ", root->val); // 输出当前节点
}
}
int main() {
int n, father, left, right;
scanf("%d", &n);
TreeNode* root = NULL;
for (int i = 0; i < n; ++i) {
scanf("%d %d %d", &father, &left, &right);
if (father == 0) {
continue;
}
TreeNode* newNode = createNode(left);
if (root == NULL) {
root = newNode;
} else {
if (father > 0) {
root->right = newNode;
} else {
root->left = newNode;
}
}
}
printf("根节点: %d\n", root->val);
printf("先序遍历: ";
preOrderTraversal(root);
printf("\n");
printf("中序遍历: ");
inOrderTraversal(root);
printf("\n");
printf("后序遍历: ");
postOrderTraversal(root);
printf("\n");
return 0;
}
```
在这个代码示例中,用户首先输入结点个数,然后按照输入的数据构建二叉树。接着,通过调用对应的遍历函数打印出相应的结果。
阅读全文