C 语言代码示例,展示了如何实现一个简单的二叉搜索树(Binary Search Tree):
代码语言:javascript复制#include <stdio.h>
#include <stdlib.h>
// 二叉搜索树节点结构体
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = malloc(sizeof(Node));
if (newNode == NULL) {
perror("Memory allocation failed");
exit(EXIT_FAILURE);
}
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
}
// 插入节点
Node* insertNode(Node* root, int data) {
if (root == NULL) {
return createNode(data);
}
if (data < root->data) {
root->left = insertNode(root->left, data);
} else if (data > root->data) {
root->right = insertNode(root->right, data);
}
return root;
}
// 中序遍历
void inOrderTraversal(Node* root) {
if (root != NULL) {
inOrderTraversal(root->left);
printf("%d ", root->data);
inOrderTraversal(root->right);
}
}
int main() {
Node* root = NULL;
// 插入节点
root = insertNode(root, 5);
root = insertNode(root, 3);
root = insertNode(root, 8);
root = insertNode(root, 1);
root = insertNode(root, 4);
root = insertNode(root, 7);
root = insertNode(root, 9);
// 中序遍历并打印结果
printf("中序遍历结果:");
inOrderTraversal(root);
printf("n");
return 0;
}
上述代码中,我们定义了一个二叉搜索树节点结构体 Node
,每个节点包含一个整型数据 data
,以及左子树和右子树的指针。我们实现了以下几个函数:
createNode
:用于创建一个新的节点,并初始化数据和指针。insertNode
:用于向二叉搜索树中插入新节点。若插入的数据小于当前节点的数据,则将其插入到左子树;若大于,则插入到右子树。inOrderTraversal
:用于进行中序遍历,按照节点的顺序打印数据。
在 main
函数中,我们创建了一个空的二叉搜索树 root
,并插入一些节点。最后,我们进行中序遍历,并打印结果。
请注意,这只是一个相对复杂的示例代码,演示了如何实现一个简单的二叉搜索树。在实际编写代码时,根据具体需求考虑不同类型的树结构以及相关操作,并谨慎处理内存分配和释放,以避免内存泄漏和其他问题。