树是一种非常重要的非线性数据结构,在计算机科学中有着广泛的应用。本文将介绍几种常见的树结构:二叉树、二叉搜索树、平衡树(AVL树和红黑树)以及B树和B+树,并提供它们在C语言中的基本实现和应用场景。
1. 二叉树
二叉树是最基本的树结构,每个节点最多有两个子节点。
实现
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
void inorderTraversal(Node* root) {
if (root != NULL) {
inorderTraversal(root->left);
printf("%d ", root->data);
inorderTraversal(root->right);
}
}
int main() {
Node* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
printf("Inorder traversal: ");
inorderTraversal(root);
printf("\n");
return 0;
}
/* 运行结果:
Inorder traversal: 4 2 5 1 3
*/
应用场景
- 表达式树:用于表示和求值数学表达式。
- 霍夫曼编码:用于数据压缩。
- 语法分析:在编译器设计中用于构建抽象语法树。
2. 二叉搜索树
二叉搜索树是一种特殊的二叉树,其中每个节点的左子树中的所有节点值都小于该节点的值,右子树中的所有节点值都大于该节点的值。
实现
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data =