C语言二叉树的遍历 建立二叉树,然后实现:输出先序遍历、中序遍历、后序涵历的结果。 输入说明 第一行:结点个数n。 以下行:每行3个数,第一个是父亲,后两个依次为左右孩子,0表示空。 输出说明 根、先中后序遍历结果。
时间: 2024-11-12 17:32:09 浏览: 60
在C语言中,二叉树是一种数据结构,其中每个节点最多有两个子节点,通常称为左孩子和右孩子。遍历二叉树是为了访问每个节点,常见的三种遍历方法包括:
1. 先序遍历(Preorder Traversal):首先访问根节点,然后递归地访问左子树,最后访问右子树。
2. 中序遍历(Inorder Traversal):首先递归地访问左子树,然后访问根节点,最后访问右子树。
3. 后序遍历(Postorder Traversal):首先递归地访问左子树和右子树,最后访问根节点。
下面是一个简单的示例,展示了如何在C语言中使用递归函数来实现这三种遍历方式:
```c
#include <stdio.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建一个新的二叉树节点
TreeNode* createNode(int data) {
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 定义遍历函数
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, parent, left, right;
scanf("%d", &n);
TreeNode *root = NULL;
for (int i = 0; i < n; i++) {
scanf("%d %d %d", &parent, &left, &right);
if (parent == 0) {
root = createNode(left);
} else {
TreeNode *temp = root;
while (temp != NULL && temp->val != parent) {
if (temp->val > parent)
temp = temp->left;
else
temp = temp->right;
}
if (temp->val == parent) {
if (left != 0)
temp->left = createNode(left);
if (right != 0)
temp->right = createNode(right);
}
}
}
printf("Root: ");
preorderTraversal(root); // 输出先序遍历结果
printf("\nInorder: ");
inorderTraversal(root); // 输出中序遍历结果
printf("\nPostorder: ");
postorderTraversal(root); // 输出后序遍历结果
return 0;
}
```
运行此程序后,你需要提供结点个数和对应的关系,程序会输出相应的先序、中序和后序遍历结果。注意,这个例子假设输入的数据都是有效的,并且树是通过连续读取输入创建的。在实际应用中,你可能需要处理错误情况和边界条件。
阅读全文