使用C语言实现一个树结构地实例
时间: 2023-08-26 21:04:05 浏览: 65
C语言树的实现
下面是一个使用C语言实现树结构的简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 树节点结构
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建一个新的树节点
TreeNode* createNode(int data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
exit(1);
}
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 插入一个节点到树中
void insertNode(TreeNode** root, int data) {
if (*root == NULL) {
*root = createNode(data);
return;
}
if (data < (*root)->data) {
insertNode(&((*root)->left), data);
} else {
insertNode(&((*root)->right), data);
}
}
// 先序遍历树
void preOrder(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->data);
preOrder(root->left);
preOrder(root->right);
}
// 中序遍历树
void inOrder(TreeNode* root) {
if (root == NULL) {
return;
}
inOrder(root->left);
printf("%d ", root->data);
inOrder(root->right);
}
// 后序遍历树
void postOrder(TreeNode* root) {
if (root == NULL) {
return;
}
postOrder(root->left);
postOrder(root->right);
printf("%d ", root->data);
}
int main() {
TreeNode* root = NULL;
// 插入节点到树中
insertNode(&root, 50);
insertNode(&root, 30);
insertNode(&root, 20);
insertNode(&root, 40);
insertNode(&root, 70);
insertNode(&root, 60);
insertNode(&root, 80);
// 先序遍历树
printf("Pre-order traversal: ");
preOrder(root);
printf("\n");
// 中序遍历树
printf("In-order traversal: ");
inOrder(root);
printf("\n");
// 后序遍历树
printf("Post-order traversal: ");
postOrder(root);
printf("\n");
return 0;
}
```
这个示例中,我们使用C语言实现了一个简单的二叉搜索树(Binary Search Tree)。我们定义了树节点结构`TreeNode`,其中包含一个整数数据`data`以及左右子节点的指针。
通过`createNode`函数可以创建一个新的树节点,并通过`insertNode`函数将节点插入到树中。插入节点时,根据节点的值比较大小,选择合适的位置进行插入。
我们还实现了三种常见的树遍历方法:先序遍历(pre-order)、中序遍历(in-order)和后序遍历(post-order)。通过调用`preOrder`、`inOrder`和`postOrder`函数,可以分别打印出树的节点值。
在`main`函数中,我们插入了一些节点,并进行了先序、中序和后序遍历的演示。
请注意,这只是一个简单的示例,实际应用中可能需要更复杂的树结构和操作。
阅读全文