用c语言写一个二叉树的建立和其先序中序后序
时间: 2024-11-24 22:40:29 浏览: 6
在 C 语言中,我们可以使用结构体和指针来构建二叉树。下面是一个简单的例子,展示了如何创建一个二叉树、插入节点以及分别进行先序遍历、中序遍历和后序遍历:
```c
#include <stdio.h>
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建新节点
TreeNode* createNode(int val) {
TreeNode *newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = val;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 插入节点
void insertNode(TreeNode** root, int val) {
if (*root == NULL) {
*root = createNode(val);
} else {
if (val < (*root)->val) {
insertNode(&((*root)->left), val);
} else {
insertNode(&((*root)->right), val);
}
}
}
// 先序遍历
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() {
TreeNode* root = NULL; // 初始化根节点为NULL
insertNode(&root, 5);
insertNode(&root, 3);
insertNode(&root, 7);
insertNode(&root, 2);
insertNode(&root, 4);
insertNode(&root, 6);
insertNode(&root, 8);
printf("Preorder traversal: ");
preorderTraversal(root);
printf("\n");
printf("Inorder traversal: ");
inorderTraversal(root);
printf("\n");
printf("Postorder traversal: ");
postorderTraversal(root);
printf("\n");
return 0;
}
```
这个程序首先定义了一个 `TreeNode` 结构表示二叉树的节点,然后实现了创建节点、插入节点及三种基本遍历方式。在 `main()` 函数中,我们创建了一个小的二叉树并进行了遍历。
阅读全文