建立一棵二叉树 并对其进行遍历(先序,中序,后序)打印输出遍历结果 用c语言编译代码
时间: 2024-12-01 12:29:45 浏览: 28
建立一棵二叉树并进行遍历,首先我们需要定义二叉树节点结构以及创建、插入节点的操作,然后实现三种基本遍历算法:先序遍历(根-左-右)、中序遍历(左-根-右)和后序遍历(左-右-根)。这里是一个简单的C语言示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左子节点指针
struct TreeNode* right; // 右子节点指针
} TreeNode;
// 创建一个新的二叉树节点
TreeNode* createNode(int val) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->val = val;
newNode->left = newNode->right = NULL;
return newNode;
}
// 插入节点到二叉搜索树
TreeNode* insertNode(TreeNode* root, int val) {
if (root == NULL) {
return createNode(val);
}
if (val < root->val)
root->left = insertNode(root->left, val);
else if (val > root->val)
root->right = insertNode(root->right, val);
return root;
}
// 递归先序遍历
void preorderTraversal(TreeNode* node) {
if (node != NULL) {
printf("%d ", node->val); // 先访问根节点
preorderTraversal(node->left); // 然后左子树
preorderTraversal(node->right); // 最后右子树
}
}
// 中序遍历
void inorderTraversal(TreeNode* node) {
if (node != NULL) {
inorderTraversal(node->left); // 先左子树
printf("%d ", node->val); // 再访问根节点
inorderTraversal(node->right); // 最后右子树
}
}
// 后序遍历
void postorderTraversal(TreeNode* node) {
if (node != NULL) {
postorderTraversal(node->left); // 先左子树
postorderTraversal(node->right); // 再右子树
printf("%d ", node->val); // 最后访问根节点
}
}
int main() {
// 初始化二叉搜索树
TreeNode* root = NULL;
root = insertNode(root, 50);
insertNode(root, 30);
insertNode(root, 20);
insertNode(root, 40);
insertNode(root, 70);
insertNode(root, 60);
insertNode(root, 80);
printf("Preorder traversal: ");
preorderTraversal(root);
printf("\n");
printf("Inorder traversal: ");
inorderTraversal(root);
printf("\n");
printf("Postorder traversal: ");
postorderTraversal(root);
printf("\n");
return 0;
}
```
这个程序会创建一个二叉搜索树,并分别进行先序、中序和后序遍历。记得编译这个C源文件时,需要链接`stdio`库。
阅读全文